head 1.3; access; symbols pkgsrc-2013Q2:1.3.0.52 pkgsrc-2013Q2-base:1.3 pkgsrc-2012Q4:1.3.0.50 pkgsrc-2012Q4-base:1.3 pkgsrc-2011Q4:1.3.0.48 pkgsrc-2011Q4-base:1.3 pkgsrc-2011Q2:1.3.0.46 pkgsrc-2011Q2-base:1.3 pkgsrc-2009Q4:1.3.0.44 pkgsrc-2009Q4-base:1.3 pkgsrc-2008Q4:1.3.0.42 pkgsrc-2008Q4-base:1.3 pkgsrc-2008Q3:1.3.0.40 pkgsrc-2008Q3-base:1.3 cube-native-xorg:1.3.0.38 cube-native-xorg-base:1.3 pkgsrc-2008Q2:1.3.0.36 pkgsrc-2008Q2-base:1.3 pkgsrc-2008Q1:1.3.0.34 pkgsrc-2008Q1-base:1.3 pkgsrc-2007Q4:1.3.0.32 pkgsrc-2007Q4-base:1.3 pkgsrc-2007Q3:1.3.0.30 pkgsrc-2007Q3-base:1.3 pkgsrc-2007Q2:1.3.0.28 pkgsrc-2007Q2-base:1.3 pkgsrc-2007Q1:1.3.0.26 pkgsrc-2007Q1-base:1.3 pkgsrc-2006Q4:1.3.0.24 pkgsrc-2006Q4-base:1.3 pkgsrc-2006Q3:1.3.0.22 pkgsrc-2006Q3-base:1.3 pkgsrc-2006Q2:1.3.0.20 pkgsrc-2006Q2-base:1.3 pkgsrc-2006Q1:1.3.0.18 pkgsrc-2006Q1-base:1.3 pkgsrc-2005Q4:1.3.0.16 pkgsrc-2005Q4-base:1.3 pkgsrc-2005Q3:1.3.0.14 pkgsrc-2005Q3-base:1.3 pkgsrc-2005Q2:1.3.0.12 pkgsrc-2005Q2-base:1.3 pkgsrc-2005Q1:1.3.0.10 pkgsrc-2005Q1-base:1.3 pkgsrc-2004Q4:1.3.0.8 pkgsrc-2004Q4-base:1.3 pkgsrc-2004Q3:1.3.0.6 pkgsrc-2004Q3-base:1.3 pkgsrc-2004Q2:1.3.0.4 pkgsrc-2004Q2-base:1.3 pkgsrc-2004Q1:1.3.0.2 pkgsrc-2004Q1-base:1.3 pkgsrc-2003Q4:1.2.0.2 pkgsrc-2003Q4-base:1.2; locks; strict; comment @# @; 1.3 date 2004.01.26.13.06.14; author jmmv; state dead; branches; next 1.2; 1.2 date 2003.10.03.17.49.27; author mycroft; state Exp; branches; next 1.1; 1.1 date 2003.10.02.12.31.30; author mycroft; state Exp; branches; next ; desc @@ 1.3 log @xine-lib and xine-ui moved to the multimedia category. @ text @$NetBSD: patch-al,v 1.2 2003/10/03 17:49:27 mycroft Exp $ --- src/libw32dll/wine/win32.c.orig 2003-10-02 12:25:52.000000000 +0000 +++ src/libw32dll/wine/win32.c 2003-10-02 12:21:50.000000000 +0000 @@@@ -440,9 +440,8 @@@@ alccnt--; - if (last_alloc) - pthread_mutex_unlock(&memmut); - else + pthread_mutex_unlock(&memmut); + if (!last_alloc) pthread_mutex_destroy(&memmut); //if (alccnt < 40000) printf("MY_RELEASE: %p\t%ld (%d)\n", header, header->size, alccnt); @@@@ -1350,10 +1349,12 @@@@ printf("wine/win32: Win32 Warning: Accessed uninitialized Critical Section (%p)!\n", c); } if(cs->locked) - if(cs->id==pthread_self()) + if(cs->id==pthread_self()) { + cs->locked++; return; + } pthread_mutex_lock(&(cs->mutex)); - cs->locked=1; + cs->locked++; /* should always be 1 */ cs->id=pthread_self(); return; } @@@@ -1371,8 +1372,8 @@@@ printf("Win32 Warning: Leaving uninitialized Critical Section %p!!\n", c); return; } - cs->locked=0; - pthread_mutex_unlock(&(cs->mutex)); + if (!--cs->locked) + pthread_mutex_unlock(&(cs->mutex)); return; } static void WINAPI expDeleteCriticalSection(CRITICAL_SECTION *c) @ 1.2 log @Adjust the CRITICAL_SECTION locking protocol slightly -- only increase cs->locked *after* acquiring the lock, so that we can count recursive locks and unlock at the right time. Doesn't seem to affect any codecs I've tested, but you never know... @ text @d1 1 a1 1 $NetBSD: patch-al,v 1.1 2003/10/02 12:31:30 mycroft Exp $ @ 1.1 log @Fix mutex locking problems and some funkiness with %fs so that win32 codecs work. @ text @d1 1 a1 1 $NetBSD$ d5 1 a5 1 @@@@ -440,9 +442,8 @@@@ d17 1 a17 2 @@@@ -1349,11 +1350,10 @@@@ #endif d20 4 a23 3 - if(cs->locked) + if(cs->locked++) if(cs->id==pthread_self()) d25 1 d28 1 d32 1 a32 1 @@@@ -1371,8 +1371,8 @@@@ @