It would be helpful to the poor users if we printed an informative error message before we abort.
755 + std::thread::id terminate_one_thread()
I think there is a potential race here:
T1: calls terminate_one_thread(), T2: calls terminate_one_thread()
A thread terminates, sets terminating_thread_id
Another thread terminates, sets terminating_thread_id, overwriting previous value
T1 wakes up, finds a valid terminating_thread_id, continues and clears terminating_thread_id
T2 wakes up, finds a cleared terminating_thread_id and blocks for the remainder of 60s timeout
267 + dispatcher{ std::shared_ ptr<md: :MultiplexingDi spatchable> (new md::Multiplexin gDispatchable{ std::dynamic_ pointer_ cast<md: :Dispatchable> (channel) })},
Why not std::make_shared?
286 + if (eventloop) abort();
It would be helpful to the poor users if we printed an informative error message before we abort.
755 + std::thread::id terminate_ one_thread( )
I think there is a potential race here:
T1: calls terminate_ one_thread( ), T2: calls terminate_ one_thread( ) thread_ id thread_ id, overwriting previous value thread_ id, continues and clears terminating_ thread_ id thread_ id and blocks for the remainder of 60s timeout
A thread terminates, sets terminating_
Another thread terminates, sets terminating_
T1 wakes up, finds a valid terminating_
T2 wakes up, finds a cleared terminating_