Commit Graph

73 Commits

Author SHA1 Message Date
Robbert van der Helm f595a48fbd Enable CLAP support for plugin groups 2022-09-11 19:18:03 +02:00
Robbert van der Helm 1fec4c8860 Change the description in the GPL header 2022-04-16 20:37:10 +02:00
Robbert van der Helm 75b3cf266d Add Process functions for detached spawning 2022-04-16 20:37:10 +02:00
Robbert van der Helm 556b0e38f9 Replace Boost.Asio with standalone Asio library
We had to add an even hackier hack now to get Boost.Process to
interoperate with Asio's IO contexts. This will be replaced later when
we replace Boost.Process.
2022-04-14 23:42:12 +02:00
Robbert van der Helm d2d4cf4ea9 Replace most uses of Boost.{Filesystem,Process}
With the `ghc::filesystem` dependency from the previous commit. If we
can replace the rest of the Boost.Filesystem dependency then we can get
rid the one nasty runtime dependency we have, and it will make
implementing the chainloading simpler since can reuse more code without
bringing in Boost.
2022-04-14 23:42:12 +02:00
Robbert van der Helm 0b9a16cf40 Change the naming scheme for class field members
I'm not a fan of Hungarian notation, but C++ kind of needs it with its
implicit `this`. And of all the common options for this, I find
suffixing members with an underscore the least offensive one.
2022-01-01 21:07:17 +01:00
Robbert van der Helm e0ab24e645 Update copyright headers
Happy new year!
2022-01-01 18:32:10 +01:00
Robbert van der Helm e3f0926aef Allow the group host to terminate cleanly
...before terminating it forcefully. Not sure why this
`TerminateProcess()` was here instead of in `group-host.cpp` in the
first place. This way we don't have to duplicate any destructor
behaviour.
2021-10-16 02:00:39 +02:00
Robbert van der Helm 1b662c07a7 Clean up group host socket endpoint files
Apparently we just left these behind. Now all yabridge related files
should be gone from the temporary directories if yabridge exits cleanly.
2021-10-16 01:58:15 +02:00
Robbert van der Helm 1883888ec6 Unify exception handling style 2021-08-07 13:17:03 +02:00
Robbert van der Helm c98a9519fe Handle X11 events within the Win32 event loop
This unifies event handling and it allows X11 events to still be
processed even when the event loop is blocked.
2021-07-31 15:19:44 +02:00
Robbert van der Helm a7496fae77 Add thread names 2021-06-06 23:45:47 +02:00
Robbert van der Helm 712ef41a7f Make realtime scheduling less aggressive
On the Wine side. Instead of always having it enabled and disabling it
when it could potentially hurt (i.e. when handling GUI related things),
we'll now only enable it when it's potentially beneficial. This way we
don't have to constantly switch scheduling policies on the GUI thread.
2021-06-01 16:21:38 +02:00
Robbert van der Helm a9643577fd Also add noexcept qualifications on the Wine side
See the last few commits.
2021-05-14 18:27:19 +02:00
Robbert van der Helm 7bcc9ac181 Cancel group host shutdown timer with new request
Or else we will still shut down the host when loading the new plugin
takes a while.
2021-05-01 22:10:51 +02:00
Robbert van der Helm 448bfca0bc Reduce the initial shutdown timer on group hosts
This five seconds matches the five seconds on the first watchdog timer
proc.
2021-05-01 22:09:34 +02:00
Robbert van der Helm bbc93d7413 Catch all exceptions during initialization 2021-05-01 18:48:46 +02:00
Robbert van der Helm 4ff538c7e1 Let group hosts shut down on their own if unused
We would never try to shut the group host down if nothing ever tried to
connect to it. This could happen when the native host gets killed after
initializing the yabridge plugin but before it gets the chance to
request the group host process to host a plugin.
2021-05-01 18:38:18 +02:00
Robbert van der Helm 832089d4d1 Implement the Wine host process watchdog
This will shut down a bridge's sockets when the connected native host
process exits, to prevent dangling Wine processes.
2021-05-01 17:54:22 +02:00
Robbert van der Helm 0642e5d08e Remove todo about STDIO capture and Wine output
This seems to actually work in some cases, but in the instances where it
does not then there would also not be a way around it.
2021-02-12 18:36:16 +01:00
Robbert van der Helm a1bb522ea0 Move piping stream lines to the log to common 2021-02-12 18:35:07 +01:00
Robbert van der Helm 6e5ea3a4d8 Skip event loop with partially initialized plugins
This should prevent T-RackS 5 from potentially stalling indefinitely
when using plugin groups.
2021-01-27 19:23:21 +01:00
Robbert van der Helm ffe46e225c Relay Wine STDIO with SCHED_OTHER
I haven't seen this cause issues myself, but it would not surprise me if
a plugin that produces a constant stream of FIXMEs would steal resources
from audio processing if the threads that are relaying those messages
are set to SCHED_FIFO.
2021-01-24 17:02:56 +01:00
Robbert van der Helm 34f8d3b1d2 Update the copyright notices for 2021 2021-01-01 18:54:02 +01:00
Robbert van der Helm 703b6d9285 Add functions to schedule tasks in main IO context 2020-12-20 12:18:51 +01:00
Robbert van der Helm 0214221c3a Rename handle_plugin_dispatch to *_run
Since run() is now the general `HostBridge()` function to listen for
incoming events.
2020-12-12 13:34:30 +01:00
Robbert van der Helm 4f8fe21fa9 Merge branch 'master' into feature/vst3 2020-12-12 13:33:36 +01:00
Robbert van der Helm 712736e74a Prevent a deadlock in plugin group handling
This was a nasty race condition that only seemed to pop up with Spitfire
plugins in REAPER, but it could also happen elsewhere. The
`active_plugins_mutex` was getting locked from the message loop, but the
plugin would block until `effOpen()` had been called. But because the
mutex was locked by the message loop we would never get to handling
`effOpen()`. Passing the pointer directly both removes this unnecessary
locking and fixes the issue.
2020-12-12 12:44:01 +01:00
Robbert van der Helm 3e13eb9e46 Merge branch 'master' into feature/vst3 2020-12-11 13:02:49 +01:00
Robbert van der Helm 29f1754527 Link to the issue instead of listing issue number 2020-12-11 13:01:45 +01:00
Robbert van der Helm c306048988 Fix hanging processes for good #69 2020-12-11 12:40:50 +01:00
Robbert van der Helm 41b79720ca Merge branch 'master' into feature/vst3 2020-12-11 00:50:43 +01:00
Robbert van der Helm ac0d83e555 Fix concurrency issue in plugin group shutdown 2020-12-10 21:41:04 +01:00
Robbert van der Helm 6e5aa1c1c6 Add the Vst3Bridge boilerplate 2020-12-07 18:28:16 +01:00
Robbert van der Helm 9291ae7e42 Include the Win32 module loading implementation 2020-12-07 18:28:16 +01:00
Robbert van der Helm 84e13e556c Add #ifdef WITH_VST3 guards around VST3 hosting 2020-12-07 18:28:16 +01:00
Robbert van der Helm 3db099e0fc Also make the GroupHost plugin type agnostic 2020-12-07 18:28:16 +01:00
Robbert van der Helm 0eb80fe866 Add a general entry point to HostBridge
Since for all plugin types we would need to start listening for incoming
events this way.
2020-12-07 18:28:16 +01:00
Robbert van der Helm e21d3e020f Rename GroupRequest to HostRequest
We'll also use this to encode information in when launching
`yabridge-host.exe` for individually hosted plugins.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 1c5a9423d2 Print the plugin type on initialization 2020-12-07 18:28:16 +01:00
Robbert van der Helm f9bb3822de Pass plugin type when calling the host application 2020-12-07 18:28:16 +01:00
Robbert van der Helm 2fbd14908a Split communication/vst2.h into common and VST2
So we can reuse the generic bits for our VST3 implementation.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 46bc0301af Move communication.h to communication/vst2.h 2020-12-07 18:28:16 +01:00
Robbert van der Helm d2500ff31d Get rid of message loop skipping and EditorOpening
This special behaviour is no longer needed now that event handling is
fully concurrent and the Win32 message loop no longer blocks
`dispatch()` calls.
2020-11-07 22:06:58 +01:00
Robbert van der Helm bece654c2d Rename PluginContext to MainContext for clarity 2020-10-28 01:02:56 +01:00
Robbert van der Helm a6b5951d81 Replace std::jthread with Win32Thread everywhere 2020-10-27 17:38:13 +01:00
Robbert van der Helm 5b00ddb0c4 Fall back to waiting when socket is not yet ready
This can happen with plugin groups.
2020-10-27 11:13:39 +01:00
Robbert van der Helm ca2b95e7aa Handle dispatch() directly during event handling
When the message loop is active and we get an incoming dispatch() event,
we'll just handle it directly. In practice this would only be needed
when the event is a response to an `audioMaster()` call made during the
event loop, but we can't know that. This allows the `getProgram()`
during `audioMasterUpdateDisplay()` in REAPER and Renoise to work
correctly. Hopefully this doesn't cause random rare breakage.
2020-10-26 20:03:54 +01:00
Robbert van der Helm 523ac64d11 Add a missing lock to reading from active_plugins
I've never seen this cause memory errors, but there exist a rare
situation where it could.
2020-10-26 12:45:38 +01:00
Robbert van der Helm d82f8463d9 Use simple numerical IDs for plugins in groups
We'll be using a similar approach to identify threads for event
handlers.
2020-10-26 11:51:13 +01:00