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()) {