From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/11774 Path: news.gmane.org!.POSTED!not-for-mail From: William Pitcock Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH] thread: do not attempt to join detached threads in pthread_join() Date: Tue, 1 Aug 2017 22:46:13 +0000 Message-ID: <20170801224613.9732-1-nenolod@dereferenced.org> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org X-Trace: blaine.gmane.org 1501627758 635 195.159.176.226 (1 Aug 2017 22:49:18 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 1 Aug 2017 22:49:18 +0000 (UTC) Cc: William Pitcock To: musl@lists.openwall.com Original-X-From: musl-return-11787-gllmg-musl=m.gmane.org@lists.openwall.com Wed Aug 02 00:49:14 2017 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1dcfyS-0008H4-7G for gllmg-musl@m.gmane.org; Wed, 02 Aug 2017 00:49:12 +0200 Original-Received: (qmail 10001 invoked by uid 550); 1 Aug 2017 22:49:17 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 9965 invoked from network); 1 Aug 2017 22:49:14 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dereferenced-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=Airldu+ESdUvY6Kph/F1DZ04vQ7Ke8jmUVUWXJnEOyY=; b=Hf42UEQqJ/jucq2y3zauMJ58ikaEYANasga4Wj6TRul/dctHg3Yi75GMBlnqdx+BBk NZqKbn1F+qTPExASwz7I5XOi3Im2h+X66jXaXr7FM1tOPzkOmAdIUyiSW9ndF4pvUJb5 rRUyYE5+OnKShZVoznLs/H8l9lK1lgppBQkFuiss5i5s9SVvC0SRyaCBspKb7oHVYX19 Fu/+LaiAkR5huhutIhOr1Z23YkmcOOb3xVFi1oxA/KjXlLQaFitRPgglAT4CwXoY2eoL 6aUIZXEOIdGqWa/A+lzOpcMC1sLmoQ/f8i/JWjzXQ6ag24bmjEPVN/halADuxDOL747O C/wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Airldu+ESdUvY6Kph/F1DZ04vQ7Ke8jmUVUWXJnEOyY=; b=XbweGYVhIln3J0RTWKMYKdUS3xyQrdT/DDSO2MfqiWUcl5lStAsK/WBsm8T8Vv/jac ONAJ4RHESJOjkHLq2fcA2fmKsuSZ/l9n+jYQ6dbZSoy+pshfi/QMbhuKdWpFP6vi3yVA GOK8DLBf/rw0wZREIkUyM8JmwTbb22C3To3E7QTDAg0HcKd9+JmboGp5vSCBmuHLlVnt WSLKKNgnIe3IY3o0bdjqTkAayQkBLBlF+GE7BPXdaYKzssrJAIT7Ath6CNO6QJv5MAwr xvCFArpgjm0t9PkPpkUbq4hesGsZk2vHqTssM0rYGKh0u8a1hL9F5Kf3X9y6CtkCHGyh GwqQ== X-Gm-Message-State: AIVw110U24meNwdLmJ4vrRAWPe9bC8hSdTLCC+rL6fQEIaOrmwLPTSKf hDSGAjp1x9lfapKOdPA= X-Received: by 10.202.97.214 with SMTP id v205mr17333991oib.139.1501627741992; Tue, 01 Aug 2017 15:49:01 -0700 (PDT) X-Mailer: git-send-email 2.13.3 Xref: news.gmane.org gmane.linux.lib.musl.general:11774 Archived-At: A thread which is detached releases it's resources and TCB upon thread termination. Therefore a thread which is detached is not joinable as any underlying futex will not be incremented, resulting in a deadlock. Accordingly, we return EINVAL instead of attempting to wait on a detached thread. Other pthread implementations such as glibc NPTL and FreeBSD also reject attempts to join detached threads with EINVAL. --- src/thread/pthread_join.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/thread/pthread_join.c b/src/thread/pthread_join.c index 52111489..7c4bde23 100644 --- a/src/thread/pthread_join.c +++ b/src/thread/pthread_join.c @@ -11,6 +11,7 @@ int __pthread_timedjoin_np(pthread_t t, void **res, const struct timespec *at) __pthread_testcancel(); __pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); if (cs == PTHREAD_CANCEL_ENABLE) __pthread_setcancelstate(cs, 0); + if (t->detached) r = EINVAL; while ((tmp = t->tid) && r != ETIMEDOUT && r != EINVAL) r = __timedwait_cp(&t->tid, tmp, CLOCK_REALTIME, at, 0); __pthread_setcancelstate(cs, 0); -- 2.13.3