Fix plugin host watchdog treating zombies as alive

This commit is contained in:
Robbert van der Helm
2021-06-22 16:54:05 +02:00
parent 0156b61e64
commit 780d562909
3 changed files with 10 additions and 7 deletions
+4
View File
@@ -44,6 +44,10 @@ Versioning](https://semver.org/spec/v2.0.0.html).
tries to use REAPER's [host function
API](https://www.reaper.fm/sdk/vst/vst_ext.php#vst_host) which currently isn't
supported by yabridge. We now explicitly ignore these requests.
- Fixed the plugin-side watchdog timer that checks whether the Wine plugin host
process failed to start treating zombie processes as still running. This could
cause plugins to hang during scanning if the Wine process crashed in a very
specific (and likely impossible) way.
- Fixed VST2 speaker arrangement configurations returned by the plugin not being
serialized correctly. No plugins seem to actually use these, so it should not
have caused any issues.
+4 -5
View File
@@ -96,11 +96,10 @@ fs::path IndividualHost::path() {
return host_path;
}
bool IndividualHost::running() noexcept {
std::error_code error{};
const bool running = host.running(error);
return running && !error;
bool IndividualHost::running() {
// NOTE: `boost::process::child::running()` still considers zombies as
// running, so it's useless for our purposes.
return pid_running(host.id());
}
void IndividualHost::terminate() {
+2 -2
View File
@@ -52,7 +52,7 @@ class HostProcess {
* Return true if the host process is still running. Used during startup to
* abort connecting to sockets if the Wine process has crashed.
*/
virtual bool running() noexcept = 0;
virtual bool running() = 0;
/**
* Kill the process or cause the plugin that's being hosted to exit.
@@ -200,7 +200,7 @@ class IndividualHost : public HostProcess {
const HostRequest& host_request);
boost::filesystem::path path() override;
bool running() noexcept override;
bool running() override;
void terminate() override;
private: