mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-10 04:30:12 +02:00
Merge branch 'master' into feature/vst3
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: true
|
||||||
|
contact_links:
|
||||||
|
- name: Discord
|
||||||
|
about: Support and announcements for yabridge, as well as general discussion about using Windows plugins though Wine
|
||||||
|
url: https://discord.gg/pyNeweqadf
|
||||||
@@ -8,6 +8,8 @@ assignees: ""
|
|||||||
|
|
||||||
Thanks for giving yabridge a shot! If you're having issues with plugins not working at all or scans timing out then make sure to check out the [troubleshooting common issues](https://github.com/robbert-vdh/yabridge#troubleshooting-common-issues) section of the readme. `yabridgectl sync` will also try to diagnose most if these issues for you during setup.
|
Thanks for giving yabridge a shot! If you're having issues with plugins not working at all or scans timing out then make sure to check out the [troubleshooting common issues](https://github.com/robbert-vdh/yabridge#troubleshooting-common-issues) section of the readme. `yabridgectl sync` will also try to diagnose most if these issues for you during setup.
|
||||||
|
|
||||||
|
Also try our [Discord](https://discord.com/invite/pyNeweqadf) for some quick help or questions.
|
||||||
|
|
||||||
**Problem description**
|
**Problem description**
|
||||||
A short description of the current situation.
|
A short description of the current situation.
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|||||||
and this project adheres to [Semantic
|
and this project adheres to [Semantic
|
||||||
Versioning](https://semver.org/spec/v2.0.0.html).
|
Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [2.2.1] - 2020-12-12
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed some plugins, notably the _Spitfire Audio_ plugins, from causing a
|
||||||
|
deadlock when using plugin groups in _REAPER_. Even though this did not seem
|
||||||
|
to cause any issues in other hosts, the race condition that caused this issue
|
||||||
|
could also occur elsewhere.
|
||||||
|
|
||||||
## [2.2.0] - 2020-12-11
|
## [2.2.0] - 2020-12-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# yabridge
|
# yabridge
|
||||||
|
|
||||||
[](https://github.com/robbert-vdh/yabridge/actions?query=workflow%3A%22Automated+builds%22+branch%3Amaster)
|
[](https://github.com/robbert-vdh/yabridge/actions?query=workflow%3A%22Automated+builds%22+branch%3Amaster)
|
||||||
|
[](https://discord.gg/pyNeweqadf)
|
||||||
|
|
||||||
Yet Another way to use Windows VST plugins on Linux. Yabridge seamlessly
|
Yet Another way to use Windows VST plugins on Linux. Yabridge seamlessly
|
||||||
supports running both 64-bit Windows VST2 plugins as well as 32-bit Windows VST2
|
supports running both 64-bit Windows VST2 plugins as well as 32-bit Windows VST2
|
||||||
@@ -329,6 +330,10 @@ group = "izotope"
|
|||||||
|
|
||||||
## Troubleshooting common issues
|
## Troubleshooting common issues
|
||||||
|
|
||||||
|
If your problem is not listed here, then feel free to post on the [issue
|
||||||
|
tracker](https://github.com/robbert-vdh/yabridge/issues) or to ask in the
|
||||||
|
[Discord](https://discord.gg/pyNeweqadf).
|
||||||
|
|
||||||
- If you have the `WINEPREFIX` environment variable set and you _don't_ want all
|
- If you have the `WINEPREFIX` environment variable set and you _don't_ want all
|
||||||
of your plugins to use that specific Wine prefix then you should unset it to
|
of your plugins to use that specific Wine prefix then you should unset it to
|
||||||
allow yabridge to automatically detect Wine prefixes for you.
|
allow yabridge to automatically detect Wine prefixes for you.
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
project(
|
project(
|
||||||
'yabridge',
|
'yabridge',
|
||||||
'cpp',
|
'cpp',
|
||||||
version : '2.2.0',
|
version : '2.2.1',
|
||||||
default_options : ['warning_level=3', 'cpp_std=c++2a', 'build.cpp_std=c++2a'],
|
default_options : ['warning_level=3', 'cpp_std=c++2a', 'build.cpp_std=c++2a'],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -111,17 +111,8 @@ GroupBridge::~GroupBridge() {
|
|||||||
stdio_context.stop();
|
stdio_context.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroupBridge::handle_plugin_dispatch(size_t plugin_id) {
|
void GroupBridge::handle_plugin_dispatch(size_t plugin_id, HostBridge* bridge) {
|
||||||
// At this point the `active_plugins` map will already contain the
|
// Blocks this thread until the plugin shuts down
|
||||||
// intialized plugin's `Vst2Bridge` instance and this thread's handle
|
|
||||||
HostBridge* bridge;
|
|
||||||
{
|
|
||||||
std::lock_guard lock(active_plugins_mutex);
|
|
||||||
bridge = active_plugins[plugin_id].second.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blocks this thread until the plugin shuts down, handling all events on
|
|
||||||
// the main IO context
|
|
||||||
bridge->run();
|
bridge->run();
|
||||||
logger.log("'" + bridge->plugin_path.string() + "' has exited");
|
logger.log("'" + bridge->plugin_path.string() + "' has exited");
|
||||||
|
|
||||||
@@ -232,16 +223,22 @@ void GroupBridge::accept_requests() {
|
|||||||
"'");
|
"'");
|
||||||
|
|
||||||
// Start listening for dispatcher events sent to the plugin's
|
// Start listening for dispatcher events sent to the plugin's
|
||||||
// socket on another thread. The actual event handling will
|
// socket on another thread. Parts of the actual event handling
|
||||||
// still be posted to this IO context so that every plugin's
|
// will still be posted to this IO context so that any events
|
||||||
// primary event handling happens on the main thread. Since this
|
// that potentially interact with the Win32 message loop are
|
||||||
// is only used within this context we don't need any locks.
|
// handled from the main thread. We also pass a raw pointer to
|
||||||
|
// the plugin so we don't have to immediately look the instance
|
||||||
|
// up in the map again, as this would require us to immediately
|
||||||
|
// lock the map again. This could otherwise result in a deadlock
|
||||||
|
// when using the Spitfire plugins, as they will block the
|
||||||
|
// message loop until `effOpen()` has been called and thus
|
||||||
|
// prevent this lock from happening.
|
||||||
const size_t plugin_id = next_plugin_id.fetch_add(1);
|
const size_t plugin_id = next_plugin_id.fetch_add(1);
|
||||||
active_plugins[plugin_id] =
|
active_plugins[plugin_id] = std::pair(
|
||||||
std::pair(Win32Thread([this, plugin_id]() {
|
Win32Thread([this, plugin_id, plugin_ptr = bridge.get()]() {
|
||||||
handle_plugin_dispatch(plugin_id);
|
handle_plugin_dispatch(plugin_id, plugin_ptr);
|
||||||
}),
|
}),
|
||||||
std::move(bridge));
|
std::move(bridge));
|
||||||
} catch (const std::runtime_error& error) {
|
} catch (const std::runtime_error& error) {
|
||||||
logger.log("Error while initializing '" + request.plugin_path +
|
logger.log("Error while initializing '" + request.plugin_path +
|
||||||
"':");
|
"':");
|
||||||
|
|||||||
@@ -141,15 +141,14 @@ class GroupBridge {
|
|||||||
* This check is delayed by a few seconds to prevent having to constantly
|
* This check is delayed by a few seconds to prevent having to constantly
|
||||||
* restart the group process during plugin scanning.
|
* restart the group process during plugin scanning.
|
||||||
*
|
*
|
||||||
* @param plugin_id The ID of this plugin in the `active_plugins` map. The
|
* @param plugin_id The ID of this plugin in the `active_plugins` map. Used
|
||||||
* thread can fetch the plugin's `Vst2Bridge` instance from that map using
|
* to unload the plugin and join this thread again after the plugin exits.
|
||||||
* this identifier.
|
|
||||||
*
|
*
|
||||||
* @note In the case that the process starts but no plugin gets initiated,
|
* @note In the case that the process starts but no plugin gets initiated,
|
||||||
* then the process will never exit on its own. This should not happen
|
* then the process will never exit on its own. This should not happen
|
||||||
* though.
|
* though.
|
||||||
*/
|
*/
|
||||||
void handle_plugin_dispatch(size_t plugin_id);
|
void handle_plugin_dispatch(size_t plugin_id, HostBridge* bridge);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listen for new requests to spawn plugins within this process and handle
|
* Listen for new requests to spawn plugins within this process and handle
|
||||||
|
|||||||
Generated
+1
-1
@@ -707,7 +707,7 @@ checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "yabridgectl"
|
name = "yabridgectl"
|
||||||
version = "2.2.0"
|
version = "2.2.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "yabridgectl"
|
name = "yabridgectl"
|
||||||
# This version is linked to yabridge's version for clarity's sake and because
|
# This version is linked to yabridge's version for clarity's sake and because
|
||||||
# there's not a lot going on here
|
# there's not a lot going on here
|
||||||
version = "2.2.0"
|
version = "2.2.1"
|
||||||
authors = ["Robbert van der Helm <mail@robbertvanderhelm.nl>"]
|
authors = ["Robbert van der Helm <mail@robbertvanderhelm.nl>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Optional utility to help set up yabridge"
|
description = "Optional utility to help set up yabridge"
|
||||||
|
|||||||
Reference in New Issue
Block a user