From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26013 invoked by alias); 3 Mar 2003 16:39:17 -0000 Mailing-List: contact pthreads-win32-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sources.redhat.com Received: (qmail 26002 invoked from network); 3 Mar 2003 16:39:13 -0000 Received: from unknown (HELO d12lmsgate-3.de.ibm.com) (194.196.100.236) by 172.16.49.205 with SMTP; 3 Mar 2003 16:39:13 -0000 Received: from d12relay02.de.ibm.com (d12relay02.de.ibm.com [9.165.215.23]) by d12lmsgate-3.de.ibm.com (8.12.3/8.12.3) with ESMTP id h23GdAEI004330 for ; Mon, 3 Mar 2003 17:39:11 +0100 Received: from d12ml007.de.ibm.com (d12ml007_cs0 [9.165.223.36]) by d12relay02.de.ibm.com (8.12.3/NCO/VER6.5) with ESMTP id h23Gd8oY040254 for ; Mon, 3 Mar 2003 17:39:11 +0100 In-Reply-To: Importance: Normal MIME-Version: 1.0 Sensitivity: To: pthreads-win32@sources.redhat.com Subject: Re: pthread_mutex_timedlock problem Message-ID: From: "Alexander Terekhov" Date: Mon, 03 Mar 2003 16:39:00 -0000 Content-Type: text/plain; charset="US-ASCII" X-SW-Source: 2003/txt/msg00034.txt.bz2 It seem to me that the "/*******/"-if-below shall be added to the pthread_mutex_timedlock.c (after line 307). LeaveCriticalSection(&mx->wait_cs); /*******/ if (!result) { /*******/ mx->recursive_count = 1; /*******/ mx->ownerThread = (mx->kind != PTHREAD_MUTEX_FAST_NP /*******/ ? pthread_self() /*******/ : (pthread_t) PTW32_MUTEX_OWNER_ANONYMOUS); /*******/ } break; } case 2: /* abstime passed before we started to wait. */ { Or am I just missing and/or misunderstanding something? regards, alexander. Sent by: pthreads-win32-owner@sources.redhat.com To: pthreads-win32@sources.redhat.com cc: Subject: pthread_mutex_timedlock problem Hello All, I'm working on an rw-mutex and found something like a dead lock when testing timed lock functions. To be sure, I wrote a simple test program, which hangs up, too. after ~4 loops it's dead (on 1GHz P3, Win2k) Here it is: #include #include #include "lib/pthreads/pthread.h" #define DELAY 200 #define _log(what) OutputDebugString( what ) pthread_mutex_t mut; void * thread_proc_w( void * ); int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int i; pthread_t th_w[2]; pthread_mutexattr_t m; pthread_mutexattr_init( &m ); pthread_mutexattr_settype( &m, PTHREAD_MUTEX_NORMAL ); //PTHREAD_MUTEX_RECURSIVE pthread_mutex_init( &mut, &m ); pthread_mutexattr_destroy( &m ); for( i=0; i<2; i++ ) pthread_create( &th_w[i], NULL, thread_proc_w, (void *) i ); while( 1 ) Sleep( 1000 ); return 0; } void * thread_proc_w( void * param ) { timespec ts; _timeb tb; while( 1 ) { Sleep( 100 ); while( 1 ) { _ftime( &tb ); ts.tv_sec = DELAY/1000 + tb.time; ts.tv_nsec = (DELAY%1000 + tb.millitm) * 1000000; int ret = pthread_mutex_timedlock( &mut, &ts ); // this makes problems if( ret == 0 ) break; } _log( param ? "\r\nL0" : "\r\nL1" ); //I'm alive Sleep( 500 ); _log( param ? "u0" : "u1" ); //unlocking ... pthread_mutex_unlock( &mut ); } pthread_exit( 0 ); return 0; } ------------------------------- (values in Sleep() do matter - some values work fine) After a few loops, the mutex 'mut' cannot be locked no more. Does anyone have any idea what's wrong ? Thanks, Robo