2 * Win32 kernel functions
4 * Copyright 1995 Martin von Loewis
17 /**********************************************************************
18 * Critical Sections are currently ignored
20 void InitializeCriticalSection(CRITICAL_SECTION
*lpCrit
)
22 memset(lpCrit
,0,sizeof(CRITICAL_SECTION
));
25 void EnterCriticalSection(CRITICAL_SECTION
* lpCrit
)
27 if (lpCrit
->LockCount
)
28 fprintf( stderr
, "Error: re-entering critical section %08lx\n",
33 void LeaveCriticalSection(CRITICAL_SECTION
* lpCrit
)
35 if (!lpCrit
->LockCount
)
36 fprintf( stderr
, "Error: leaving critical section %08lx again\n",
41 void DeleteCriticalSection(CRITICAL_SECTION
* lpCrit
)
46 void ReinitializeCriticalSection(CRITICAL_SECTION
*lpCrit
) {
50 void MakeCriticalSectionGlobal(CRITICAL_SECTION
*lpCrit
) {
55 /* FIXME: This is required to work cross-addres space as well */
56 static CRITICAL_SECTION interlocked
;
57 static int interlocked_init
;
59 static void get_interlocked()
62 InitializeCriticalSection(&interlocked
);
64 EnterCriticalSection(&interlocked
);
67 static void release_interlocked()
69 LeaveCriticalSection(&interlocked
);
72 /***********************************************************************
73 * InterlockedIncrement
75 LONG
InterlockedIncrement(LPLONG lpAddend
)
81 release_interlocked();
85 /***********************************************************************
86 * InterlockedDecrement
88 LONG
InterlockedDecrement(LPLONG lpAddend
)
94 release_interlocked();
98 /***********************************************************************
101 LONG
InterlockedExchange(LPLONG target
, LONG value
)
107 release_interlocked();