delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2024/01/22/04:59:07

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: <Za48HKcCwgYSLQdY@calimero.vinschen.de>
Mail-Followup-To: cygwin AT cygwin DOT com
References: <20240119224436 DOT 876a055f356f7c6796bc725b AT nifty DOT ne DOT jp>
<ZaqHGElhXZIc3NFX AT calimero DOT vinschen DOT de>
<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>
<Za40iEPcedfBSt5n AT calimero DOT vinschen DOT de>
MIME-Version: 1.0
In-Reply-To: <Za40iEPcedfBSt5n@calimero.vinschen.de>
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.30
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
From: Corinna Vinschen via Cygwin <cygwin AT cygwin DOT com>
Reply-To: cygwin AT cygwin DOT com
Cc: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
Errors-To: cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com>

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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019