Fix concurrency issue in plugin group shutdown

This commit is contained in:
Robbert van der Helm
2020-12-10 21:40:52 +01:00
parent c05040d98b
commit ac0d83e555
3 changed files with 9 additions and 1 deletions
+2
View File
@@ -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
sets a limit on the amount of time a plugin may take to shut down when closing
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
View File
@@ -135,8 +135,9 @@ void GroupBridge::handle_plugin_dispatch(size_t plugin_id) {
// Defer actually shutting down the process to allow for fast plugin
// 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.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
// exits
if (error.failed()) {
+5
View File
@@ -276,4 +276,9 @@ class GroupBridge {
* @see handle_plugin_dispatch
*/
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;
};