X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 554183858420 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1705917546; bh=4XXworPclPXsaYJ6Cp9W4u1zCo3/pR4w/ZkWvwN48II=; h=Date:To:Subject:References:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=QOV1e3WF11I3w6TIH3znpVpnyJ5w/uwSR37rhtn7wnsgrUYcgLJWV4P4u327dxqhK rchLMr95Q2JPsQzHhbGWMGXQFgDNVFP4lMBygAcwztpMqcDvvJbHj/ROWbYs7D35ej 9wND4ebSc0o0jJWE0fkCUXFoeK2+UmrEKeoR1WVY= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F18CF3858410 Date: Mon, 22 Jan 2024 10:57:48 +0100 To: cygwin AT cygwin DOT com Subject: Re: Possiblly bug of cygwin1.dll Message-ID: Mail-Followup-To: cygwin AT cygwin DOT com References: <20240119224436 DOT 876a055f356f7c6796bc725b AT nifty DOT ne DOT jp> <20240120131825 DOT 4157c259fe058155137d6fe0 AT nifty DOT ne DOT jp> <20240120141349 DOT cde31e62177a0405b0ee9934 AT nifty DOT ne DOT jp> <87v87ov03x DOT fsf AT Gerda DOT invalid> <20240120212427 DOT 1e69fd3655ece73ecd508def AT nifty DOT ne DOT jp> <20240121201051 DOT 795a4405576a97ab8729e273 AT nifty DOT ne DOT jp> <87fryqizl3.fsf@> <20240122123023 DOT b8eaac0e50d1e8856f44a115 AT nifty DOT ne DOT jp> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.30 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Corinna Vinschen via Cygwin Reply-To: cygwin AT cygwin DOT com Cc: Corinna Vinschen Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com Sender: "Cygwin" On Jan 22 10:25, Corinna Vinschen via Cygwin wrote: > On Jan 22 12:30, Takashi Yano via Cygwin wrote: > > PATCH2: (for cygwin) > > Avoid handle leak caused when non-static pthread_once_t is initialized > > with PTHREAD_ONCE_INIT > > diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc > > index 7bb4f9fc8..127569160 100644 > > --- a/winsup/cygwin/thread.cc > > +++ b/winsup/cygwin/thread.cc > > @@ -2060,6 +2060,9 @@ pthread::once (pthread_once_t *once_control, void (*init_routine) (void)) > > { > > init_routine (); > > once_control->state = 1; > > + pthread_mutex_unlock (&once_control->mutex); > > + while (pthread_mutex_destroy (&once_control->mutex) == EBUSY); > > + return 0; > > } > > /* Here we must remove our cancellation handler */ > > pthread_mutex_unlock (&once_control->mutex); > > I see what you're doing here. Wouldn't it be simpler, though, to do this? > > diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc > index 7bb4f9fc8341..7ec3aace395d 100644 > --- a/winsup/cygwin/thread.cc > +++ b/winsup/cygwin/thread.cc > @@ -2063,6 +2063,7 @@ pthread::once (pthread_once_t *once_control, void (*init_routine) (void)) > } > /* Here we must remove our cancellation handler */ Strange enough, this comment accompanies the code since its inception in 2001. It says explicitly "remove" the cancellation handler. That sounds like the idea was right, just the programmer forgot about it afterwards... > pthread_mutex_unlock (&once_control->mutex); > + while (pthread_mutex_destroy (&once_control->mutex) == EBUSY); > return 0; > } Corinna -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple