mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-09 20:29:10 +02:00
Fix concurrency issue in plugin group shutdown
This commit is contained in:
@@ -35,6 +35,8 @@ Versioning](https://semver.org/spec/v2.0.0.html).
|
|||||||
plugin to shut down. This could happen when using Kontakt in Bitwig, as Bitwig
|
plugin to shut down. This could happen when using Kontakt in Bitwig, as Bitwig
|
||||||
sets a limit on the amount of time a plugin may take to shut down when closing
|
sets a limit on the amount of time a plugin may take to shut down when closing
|
||||||
Bitwig.
|
Bitwig.
|
||||||
|
- Fixed a potential crash or freeze when removing a lot of plugins from a plugin
|
||||||
|
group at exactly the same time.
|
||||||
|
|
||||||
## [2.1.0] - 2020-11-20
|
## [2.1.0] - 2020-11-20
|
||||||
|
|
||||||
|
|||||||
@@ -135,8 +135,9 @@ void GroupBridge::handle_plugin_dispatch(size_t plugin_id) {
|
|||||||
|
|
||||||
// Defer actually shutting down the process to allow for fast plugin
|
// Defer actually shutting down the process to allow for fast plugin
|
||||||
// scanning by allowing plugins to reuse the same group host process
|
// scanning by allowing plugins to reuse the same group host process
|
||||||
|
std::lock_guard lock(shutdown_timer_mutex);
|
||||||
shutdown_timer.expires_after(2s);
|
shutdown_timer.expires_after(2s);
|
||||||
shutdown_timer.async_wait([&](const boost::system::error_code& error) {
|
shutdown_timer.async_wait([this](const boost::system::error_code& error) {
|
||||||
// A previous timer gets canceled automatically when another plugin
|
// A previous timer gets canceled automatically when another plugin
|
||||||
// exits
|
// exits
|
||||||
if (error.failed()) {
|
if (error.failed()) {
|
||||||
|
|||||||
@@ -276,4 +276,9 @@ class GroupBridge {
|
|||||||
* @see handle_plugin_dispatch
|
* @see handle_plugin_dispatch
|
||||||
*/
|
*/
|
||||||
boost::asio::steady_timer shutdown_timer;
|
boost::asio::steady_timer shutdown_timer;
|
||||||
|
/**
|
||||||
|
* A mutex to prevent two threads from simultaneously modifying the shutdown
|
||||||
|
* timer when multiple plugins exit at the same time.
|
||||||
|
*/
|
||||||
|
std::mutex shutdown_timer_mutex;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user