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 tries to use REAPER's [host function
API](https://www.reaper.fm/sdk/vst/vst_ext.php#vst_host) which currently isn't 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. 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 - Fixed VST2 speaker arrangement configurations returned by the plugin not being
serialized correctly. No plugins seem to actually use these, so it should not serialized correctly. No plugins seem to actually use these, so it should not
have caused any issues. have caused any issues.
+4 -5
View File
@@ -96,11 +96,10 @@ fs::path IndividualHost::path() {
return host_path; return host_path;
} }
bool IndividualHost::running() noexcept { bool IndividualHost::running() {
std::error_code error{}; // NOTE: `boost::process::child::running()` still considers zombies as
const bool running = host.running(error); // running, so it's useless for our purposes.
return pid_running(host.id());
return running && !error;
} }
void IndividualHost::terminate() { 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 * Return true if the host process is still running. Used during startup to
* abort connecting to sockets if the Wine process has crashed. * 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. * 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); const HostRequest& host_request);
boost::filesystem::path path() override; boost::filesystem::path path() override;
bool running() noexcept override; bool running() override;
void terminate() override; void terminate() override;
private: private: