From owner-freebsd-hackers@FreeBSD.ORG Fri Feb 9 05:29:15 2007 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id EFD7916A401 for ; Fri, 9 Feb 2007 05:29:15 +0000 (UTC) (envelope-from youshi10@u.washington.edu) Received: from mxout5.cac.washington.edu (mxout5.cac.washington.edu [140.142.32.135]) by mx1.freebsd.org (Postfix) with ESMTP id CB17113C494 for ; Fri, 9 Feb 2007 05:29:15 +0000 (UTC) (envelope-from youshi10@u.washington.edu) Received: from smtp.washington.edu (smtp.washington.edu [140.142.32.139]) by mxout5.cac.washington.edu (8.13.7+UW06.06/8.13.7+UW06.09) with ESMTP id l195TFET028467 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 8 Feb 2007 21:29:15 -0800 X-Auth-Received: from [192.168.10.41] (c-67-187-172-183.hsd1.ca.comcast.net [67.187.172.183]) (authenticated authid=youshi10) by smtp.washington.edu (8.13.7+UW06.06/8.13.7+UW06.09) with ESMTP id l195TEIu001072 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Thu, 8 Feb 2007 21:29:14 -0800 Message-ID: <45CC06A3.5080909@u.washington.edu> Date: Thu, 08 Feb 2007 21:29:07 -0800 From: Garrett Cooper User-Agent: Thunderbird 1.5.0.9 (X11/20070122) MIME-Version: 1.0 To: freebsd-hackers@freebsd.org References: <87D4B047-DC72-427B-863F-A082C3A4E5CD@u.washington.edu> <45CB38D8.1000706@u.washington.edu> <45CC014B.9020303@u.washington.edu> <45CC01B0.8050502@u.washington.edu> In-Reply-To: <45CC01B0.8050502@u.washington.edu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-PMX-Version: 5.3.0.289146, Antispam-Engine: 2.5.0.283055, Antispam-Data: 2007.2.8.211934 X-Uwash-Spam: Gauge=IIIIIII, Probability=7%, Report='__CP_URI_IN_BODY 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __HAS_MSGID 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __SANE_MSGID 0, __USER_AGENT 0' Subject: Re: Trying to join an already exited pthread X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Feb 2007 05:29:16 -0000 Garrett Cooper wrote: > Garrett Cooper wrote: >> Garrett Cooper wrote: >>> Garrett Cooper wrote: >>>> On Feb 7, 2007, at 1:51 PM, Steve Watt wrote: >>>> >>>>> In , >>>>> wrote: >>>>>> Just wondering: >>>>>> >>>>>> If I was to try and join a pthread that already exited, would >>>>>> there be an error >>>>>> message output and/or errno set to an error value, or would a >>>>>> system hang? >>>>> >>>>> Was the thread created with detach state set >>>>> PTHREAD_CREATE_DETACHED or >>>>> PTHREAD_CREATE_JOINABLE? If it was PTHREAD_CREATE_JOINABLE, has the >>>>> thread already been joined? >>>>> >>>>> You should be able to join a thread that was created joinable, only >>>>> once. >>>>> If you join it again, or join a thread that was created detached, the >>>>> results are unspecified in POSIX. There is an error status that may >>>>> be returned, but it may do other bad things to your system. >>>>> >>>>> Note that pthread_join doesn't set errno; it returns an error value >>>>> directly. I would never expect the system to hang, though the >>>>> application >>>>> might. If your application is hanging, make sure that you're not >>>>> trying >>>>> to call pthread_join from within a signal handler. >>>>> >>>>>> It this variable on Unix OSes? >>>>> >>>>> That the results are unspecified? No. What "unspecified" means? >>>>> Absolutely. >>>>> --Steve Watt KD6GGD PP-ASEL-IA ICBM: 121W 56' 57.5" / 37N >>>>> 20' 15.3" >>>>> Internet: steve @ Watt.COM Whois: SW32-ARIN >>>>> Free time? There's no such thing. It just comes in varying >>>>> prices... >>>> >>>> I asked this because I was short on time and so was the person >>>> who asked me earlier. I'm going to try giving the pthread exit and >>>> join a shot just to see whether or not this is true or not and then >>>> I'll report my results to the list. >>>> Thanks for the insight though--hopefully my results will yield a >>>> solid positive or negative to this being a problem. >>>> -Garrett >>> >>> Under Suse Linux there were absolutely no errors when I tried to do >>> this. I'll post a code snippet later. >>> -Garrett >> >> Ok, here's a link to my code: >> >> http://students.washington.edu/youshi10/posted/thread_test.c >> >> My results (FreeBSD): >> >> [root@hoover /home/gcooper]# ./tt >> Thread join detached >> Thread kill detached >> Joined thread yielded error code: 2 >> Trying to join the already joined thread yields error code: 0 >> >> My results (Suse Linux): >> >> # ./tt >> Thread join detached >> Thread kill detached >> Joined thread yielded error code: 0 >> Trying to join the already joined thread yields error code: 0 >> >> That was sure interesting.. is it supposed to error out or was it the >> remnant of an old error call? >> >> Probably the latter, but I was just curious.. >> >> -Garrett Actually, now that I think about it the calls I made with ps in the program are valid for Linux but not for FreeBSD (they're for getting thread listings). Hence error code 2. From intro(2): 2 ENOENT No such file or directory. A component of a specified pathname did not exist, or the pathname was an empty string. Didn't think that a bad command would return errno=2 though.. -Garrett