LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 42918 - libc++ passes invalid values to pthread_equal
Summary: libc++ passes invalid values to pthread_equal
Status: RESOLVED FIXED
Alias: None
Product: libc++
Classification: Unclassified
Component: All Bugs (show other bugs)
Version: unspecified
Hardware: All FreeBSD
: P normal
Assignee: Marshall Clow (home)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-08-07 07:49 PDT by Marshall Clow (home)
Modified: 2019-08-14 14:33 PDT (History)
3 users (show)

See Also:
Fixed By Commit(s):


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Marshall Clow (home) 2019-08-07 07:49:33 PDT
[ received from Ed Maste at FreeBSD ]

We just had a FreeBSD bug submitted for a failure arising from
libc++'s use of pthread_equal.

FreeBSD's pthread_equal stub implementation (used in non-threaded
programs) returns true unconditionally, since a non-threaded program
cannot have two different threads. However, std::thread::id defines a
special value that should not equal any real thread, and this is may
be passed to pthread_equal. See FreeBSD PR 239550 for more details,
and PR 239038 for the user-facing issue that prompted this.

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239550
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239038

Now the most expedient fix is probably for us to make pthread_equal
somewhat less of a stub, but for correctness it seems
__libcpp_thread_id_equal would need to check for libc++'s special
value before calling pthread_equal.
Comment 1 Marshall Clow (home) 2019-08-07 07:52:11 PDT
I've looked at this, and it seems like the best place to fix this is in __thread_id, which is where the "no thread == 0" is imposed.

However, the recursive_timed_mutex implementation doesn't use __thread_id, but instead goes right to the underlying type __libcpp_thread_id.

Also, we have no tests  :-(
Comment 2 Marshall Clow (home) 2019-08-14 14:33:45 PDT
Fixed in revision 368916.