From owner-freebsd-threads@FreeBSD.ORG Thu Oct 7 23:50:20 2004 Return-Path: Delivered-To: freebsd-threads@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E451716A4CE for ; Thu, 7 Oct 2004 23:50:20 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id D7C8F43D1D for ; Thu, 7 Oct 2004 23:50:20 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) i97NoKhD006202 for ; Thu, 7 Oct 2004 23:50:20 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i97NoKaJ006201; Thu, 7 Oct 2004 23:50:20 GMT (envelope-from gnats) Date: Thu, 7 Oct 2004 23:50:20 GMT Message-Id: <200410072350.i97NoKaJ006201@freefall.freebsd.org> To: freebsd-threads@FreeBSD.org From: Daniel Eischen Subject: Re: threads/72429: threads blocked in stdio (fgets, etc) are not cancellable in 5.3 (works in 4.x) X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Daniel Eischen List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Oct 2004 23:50:21 -0000 The following reply was made to PR threads/72429; it has been noted by GNATS. From: Daniel Eischen To: Mark Gooderum Cc: freebsd-gnats-submit@freebsd.org, , Subject: Re: threads/72429: threads blocked in stdio (fgets, etc) are not cancellable in 5.3 (works in 4.x) Date: Thu, 7 Oct 2004 19:44:45 -0400 (EDT) On Thu, 7 Oct 2004, Mark Gooderum wrote: > Uncle. Okay - you're right, sigh. > > It's not so much that we're using fgets() as many/most C based parsing > libraries use stdio, bleh. > > As for why libc_r is cancellable... > > In 4.x _foo() sets the cancellation state and calls __foo() (for read, > write, et.al), in 5.3 it's reversed. Hmm, that's not what it looks like for read. In 4.x, read() sets the cancellation state and calls _read(). It looks like fgets() ends up calling __sread() which calls _read(), so I'm not sure how cancellation is getting set. Only read() in libc_r sets the cancellation point, not _read(). I'm looking at revision 1.11.2.4 of uthread/uthread.c; are we looking at the same version? -- Dan Eischen