From 48aeedec0afd4f68225e38dbac26c9df8f391fe2 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Mon, 25 Mar 2024 18:14:44 -0400 Subject: [PATCH] bug: fix crashing race condition in mod_dub --- mod_dub/ap_file.cpp | 21 ++++++++++++--------- mod_dub/ap_http.cpp | 21 ++++++++++++--------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/mod_dub/ap_file.cpp b/mod_dub/ap_file.cpp index f508db3..194cd25 100644 --- a/mod_dub/ap_file.cpp +++ b/mod_dub/ap_file.cpp @@ -58,7 +58,7 @@ AudioProducerFile::AudioProducerFile( std::mutex& mutex, CircularBuffer_t& circularBuffer, int sampleRate -) : AudioProducer(mutex, circularBuffer, sampleRate), _timer(io_service), _mh(nullptr) { +) : AudioProducer(mutex, circularBuffer, sampleRate), _timer(io_service), _mh(nullptr), _fp(nullptr) { AudioProducerFile::_init(); } @@ -176,16 +176,19 @@ void AudioProducerFile::stop() { } void AudioProducerFile::reset() { + { + std::lock_guard lock(_mutex); if (_fp) { - fclose(_fp); - _fp = nullptr; + fclose(_fp); + _fp = nullptr; + } + if (_mh) { + mpg123_close(_mh); + mpg123_delete(_mh); + _mh = nullptr; + } } - if (_mh) { - mpg123_close(_mh); - mpg123_delete(_mh); - _mh = nullptr; - } - _timer.cancel(); + _timer.cancel(); _status = Status_t::STATUS_NONE; } diff --git a/mod_dub/ap_http.cpp b/mod_dub/ap_http.cpp index 357aadf..ac4952b 100644 --- a/mod_dub/ap_http.cpp +++ b/mod_dub/ap_http.cpp @@ -636,15 +636,18 @@ void AudioProducerHttp::stop() { } void AudioProducerHttp::reset() { - if (_easy) { - curl_multi_remove_handle(global.multi, _easy); - curl_easy_cleanup(_easy); - _easy = nullptr; - } - if (_mh) { - mpg123_close(_mh); - mpg123_delete(_mh); - _mh = nullptr; + { + std::lock_guard lock(_mutex); + if (_easy) { + curl_multi_remove_handle(global.multi, _easy); + curl_easy_cleanup(_easy); + _easy = nullptr; + } + if (_mh) { + mpg123_close(_mh); + mpg123_delete(_mh); + _mh = nullptr; + } } _err_msg.clear(); _response_code = 0;