libstdc++: Assigning to a joinable std::jthread calls std::terminate
authorPaul Scharnofske <asynts@gmail.com>
Wed, 11 Nov 2020 09:29:37 +0000 (09:29 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 11 Nov 2020 11:13:31 +0000 (11:13 +0000)
commit0ebaea3b6677ef8edfa5638800304db1a4f7c2f8
tree76e8e5d3415c5a0039034cd4f5ad249032996a4a
parent43f9e5aff06f1ca2296fdbd3141fe90ec0be1912
libstdc++: Assigning to a joinable std::jthread calls std::terminate

Move assigning to a std::jthread that represents a thread of execution
needs to send a stop request and join that running thread. Otherwise the
std::thread data member will terminate in its assignment operator.

Co-authored-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/std/thread (jthread::operator=(jthread&&)): Transfer
any existing state to a temporary that will request a stop and
then join.
* testsuite/30_threads/jthread/jthread.cc: Test move assignment.
libstdc++-v3/include/std/thread
libstdc++-v3/testsuite/30_threads/jthread/jthread.cc