提交 80bf5952 编写于 作者: R Rich Felker

trap UB from attempts to join a detached thread

passing to pthread_join the id of a thread which is not joinable
results in undefined behavior.

in principle the check to trap does not necessarily work if
pthread_detach was called after thread creation, since no effort is
made here to synchronize access to t->detached, but the check is
well-defined and harmless for callers which did not invoke UB, and
likely to help catch erroneous code that would otherwise mysteriously
hang.

patch by William Pitcock.
上级 e31c8c2d
......@@ -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) a_crash();
while ((tmp = t->tid) && r != ETIMEDOUT && r != EINVAL)
r = __timedwait_cp(&t->tid, tmp, CLOCK_REALTIME, at, 0);
__pthread_setcancelstate(cs, 0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册