implied: use a time based timeout instead of counting ->nr_children
[smatch.git] / validation / sm_wine_locking.c
blob10c03b54eccc68b4e9075b0870b745e54515eb64
1 int create_window_handle(int x);
2 void WIN_ReleasePtr(int x);
3 void EnterCriticalSection(int x);
4 void LeaveCriticalSection(int x);
5 void USER_Lock(void);
6 void USER_Unlock(void);
7 int GDI_GetObjPtr(int x);
8 void GDI_ReleaseObj(int x);
10 int a, b, c, d, e, z;
12 void test1(void)
14 b = create_window_handle(a);
15 z = frob();
17 if (d = GDI_GetObjPtr(e))
18 GDI_ReleaseObj(e);
19 if (GDI_GetObjPtr(e))
20 GDI_ReleaseObj(e);
21 EnterCriticalSection(c);
22 USER_Lock();
23 if (b) {
24 LeaveCriticalSection(c);
25 WIN_ReleasePtr(b);
27 WIN_ReleasePtr(b);
28 if (z)
29 return;
30 USER_Unlock();
31 if (!b)
32 LeaveCriticalSection(c);
35 * check-name: WINE locking
36 * check-command: smatch -p=wine --spammy sm_wine_locking.c
38 * check-output-start
39 sm_wine_locking.c:27 test1() error: double unlock 'create_window_handle:b'
40 sm_wine_locking.c:29 test1() warn: 'CriticalSection:c' is sometimes locked here and sometimes unlocked.
41 sm_wine_locking.c:32 test1() warn: inconsistent returns 'USER_Lock:'.
42 Locked on: line 29
43 Unlocked on: line 32
44 * check-output-end