On Thu, Oct 18, 2001 at 12:22:10AM +0200, Michael Marxmeier wrote:
After encountering timeout messages from RtlEnterCriticalSection i had a look at it.
Since interlocked_inc() should never return zero the following patch is likely necessary. I was unable to test this as now wine crashes with a segmentation fault (which also terminates gdb).
That is a sign that your patch is faulty. Any number of threads can increase this counter, it only succeeds if the count is really 0 before the call. (0 meaning the critical section is completely unlocked). If it is any other number, it is either a recursive enter or a different thread. Ciao, Marcus
Michael
--- critsection.c.orig Wed Oct 17 23:24:13 2001 +++ critsection.c Thu Oct 18 00:04:32 2001 @@ -233,7 +233,7 @@ */ NTSTATUS WINAPI RtlEnterCriticalSection( RTL_CRITICAL_SECTION *crit ) { - if (interlocked_inc( &crit->LockCount )) + if (interlocked_inc( &crit->LockCount ) != 1) { if (crit->OwningThread == GetCurrentThreadId()) {