From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22346 invoked by alias); 9 Mar 2004 15:09:36 -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 22338 invoked from network); 9 Mar 2004 15:09:34 -0000 Received: from unknown (HELO smtp.irisa.fr) (131.254.130.26) by sources.redhat.com with SMTP; 9 Mar 2004 15:09:34 -0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by localhost.irisa.fr (Postfix) with ESMTP id 2837AFBA6 for ; Tue, 9 Mar 2004 16:09:34 +0100 (CET) Received: from smtp.irisa.fr ([131.254.130.26]) by localhost (meli.irisa.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 05004-03 for ; Tue, 9 Mar 2004 16:09:33 +0100 (CET) Received: from lesvos (lesvos.irisa.fr [131.254.100.107]) by smtp.irisa.fr (Postfix) with SMTP id B2AD3FADB for ; Tue, 9 Mar 2004 16:09:33 +0100 (CET) Message-ID: <003801c405e0$32c91a70$6b64fe83@lesvos> From: "Panagiotis E. Hadjidoukas" To: References: <4047B840.5000509@callisto.canberra.edu.au> <404DD193.4060303@manabove.org> Subject: Re: problem using pthread_cancel and pthread_mutex_lock Date: Tue, 09 Mar 2004 15:09:00 -0000 MIME-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit X-Virus-Scanned: by amavisd-new at irisa.fr X-SW-Source: 2004/txt/msg00025.txt.bz2 In general, don' t you agree that an "official" extension of QueueUserAPC (e.g. QueueUserAPCEx, that automatically sets the target thread in alertable state) would be very useful? Panagiotis ----- Original Message ----- From: "Brano Kemen" To: Sent: Tuesday, March 09, 2004 4:15 PM Subject: Re: problem using pthread_cancel and pthread_mutex_lock > > > Ross Johnson wrote: > > There is another reason to avoid async cancelation that is specific to > > pthreads-win32: this implementation only approximates async cancelation > > because it relies on the thread actually running at some point after > > cancelation. So if your thread is blocked on a resource at the time that > > it's async canceled, it won't actually exit until it's unblocked in some > > way to resume execution (at which point it will exit immediately) - and > > if you can do that then you don't need async cancelation anyway. > > Unfortunately, the time you're most likely to really need an async > > cancel - to kill a thread blocked on a system resource that you can't > > unblock - is the very time it won't work in pthreads-win32, and if it > > did work, as in does in other implementations, then you'd probably be > > creating a resource leak. So it's hard to find a good argument for async > > cancel. > > There's one thing that can help with the blocked threads in windows. It's the undocumented "NtAlertThread" function that is exported from ntdll.dll, that apparently wakes up the thread even when blocked (listening on socket etc.), so it would run the injected cancelation code. > We use async cancelation in our project (http://coid.sourceforge.net) without problems. > > On a related note - I think there's bug in pthread_cancel.c in the 'else' block starting at line 146. Thread is suspended, and then checked with WaitForSingleObject(threadH, 0) if it did not exit already. But if it did, the thread->cancelLock (locked at line 129) is never unlocked back. > > brk > > >