Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Message-ID: <011101c14a11$259955f0$01000001@lifelesswks> From: "Robert Collins" To: "Jean Barata" , References: <000501c149eb$9520edf0$022133c6 AT murphy> Subject: Re: Bug in pthread ? Date: Mon, 1 Oct 2001 10:36:43 +1000 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 X-OriginalArrivalTime: 01 Oct 2001 00:43:50.0374 (UTC) FILETIME=[2336B860:01C14A12] ----- Original Message ----- From: "Jean Barata" To: Sent: Monday, October 01, 2001 6:07 AM Subject: Bug in pthread ? > Hello, > > Here is the problem: > if I don't "initialiaze" the mutex in the constructor, it works in any case. > but if I "initialize" it, it worked with cygwin1.dll (v1.3.2) and not > anymore with cygwin1.dll (v1.3.3) > when calling the function "fct", the program waits forever on the > "pthread_mutex_lock" instruction (and if I debug it with GDB: &_mutex is > NULL) > > so, is it a bug or is it normal ??? > > > class A { > public: > A(); > void fct(void); > private: > pthread_mutex_t _mutex; > pthread_mutexattr_t _mutex_attr; > }; > > A::A() { > pthread_mutexattr_init(&_mutex_attr); > pthread_mutex_init(&_mutex, &_mutex_attr); > pthread_mutex_unlock(&_mutex); /*********** BUG ??? **************/ This is a bug in your code. You are unlocking an already unlocked mutex. Cygwin should return EPERM to that call - and I note you are note checking any error codes from the system calls, which is quite dangerou programming style. You might like to check http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_mutex_unlock.h tml and http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_mutex_init.htm l Rob > } > > void A::fct(void) { > pthread_mutex_lock(&_mutex); /********** WAITING HERE ... ************/ > ... > pthread_mutex_unlock(&_mutex); > } > > > > -- > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Bug reporting: http://cygwin.com/bugs.html > Documentation: http://cygwin.com/docs.html > FAQ: http://cygwin.com/faq/ > > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/