CommonThreadPartsTrait: fixed thread crashes sometimes missing cause info

closes #6669

this happens because isTerminated returns true before the thread's shutdown handler runs,
so we join with the thread to make sure that shutdown handlers are done before returning.

... hopefully we don't get servers randomly deadlocking in shutdown handlers ???
This commit is contained in:
Dylan K. Taylor 2025-05-17 19:09:54 +01:00
parent b5f236c019
commit 94fb5d95b9
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -94,7 +94,17 @@ trait CommonThreadPartsTrait{
} }
} }
public function getCrashInfo() : ?ThreadCrashInfo{ return $this->crashInfo; } public function getCrashInfo() : ?ThreadCrashInfo{
//TODO: Joining a crashed worker might be a bit sus, but we need to make sure the thread's shutdown
//handler has run before we try to collect the crash info. As of 6.1.1, pmmpthread sets isTerminated=true
//*before* the shutdown handler is invoked, so we might land here before the crash info has been set.
//In the future this should probably be fixed by running the shutdown handlers before setting isTerminated,
//but this workaround should be good enough for now.
if($this->isTerminated() && !$this->isJoined()){
$this->join();
}
return $this->crashInfo;
}
public function start(int $options = NativeThread::INHERIT_NONE) : bool{ public function start(int $options = NativeThread::INHERIT_NONE) : bool{
ThreadManager::getInstance()->add($this); ThreadManager::getInstance()->add($this);