mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-07 03:50:11 +02:00
Fix plugin host watchdog treating zombies as alive
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user