bug: fix crashing race condition in mod_dub

This commit is contained in:
Dave Horton
2024-03-25 18:14:44 -04:00
parent be6758c3a8
commit 48aeedec0a
2 changed files with 24 additions and 18 deletions

View File

@@ -58,7 +58,7 @@ AudioProducerFile::AudioProducerFile(
std::mutex& mutex, std::mutex& mutex,
CircularBuffer_t& circularBuffer, CircularBuffer_t& circularBuffer,
int sampleRate int sampleRate
) : AudioProducer(mutex, circularBuffer, sampleRate), _timer(io_service), _mh(nullptr) { ) : AudioProducer(mutex, circularBuffer, sampleRate), _timer(io_service), _mh(nullptr), _fp(nullptr) {
AudioProducerFile::_init(); AudioProducerFile::_init();
} }
@@ -176,16 +176,19 @@ void AudioProducerFile::stop() {
} }
void AudioProducerFile::reset() { void AudioProducerFile::reset() {
{
std::lock_guard<std::mutex> lock(_mutex);
if (_fp) { if (_fp) {
fclose(_fp); fclose(_fp);
_fp = nullptr; _fp = nullptr;
}
if (_mh) {
mpg123_close(_mh);
mpg123_delete(_mh);
_mh = nullptr;
}
} }
if (_mh) { _timer.cancel();
mpg123_close(_mh);
mpg123_delete(_mh);
_mh = nullptr;
}
_timer.cancel();
_status = Status_t::STATUS_NONE; _status = Status_t::STATUS_NONE;
} }

View File

@@ -636,15 +636,18 @@ void AudioProducerHttp::stop() {
} }
void AudioProducerHttp::reset() { void AudioProducerHttp::reset() {
if (_easy) { {
curl_multi_remove_handle(global.multi, _easy); std::lock_guard<std::mutex> lock(_mutex);
curl_easy_cleanup(_easy); if (_easy) {
_easy = nullptr; curl_multi_remove_handle(global.multi, _easy);
} curl_easy_cleanup(_easy);
if (_mh) { _easy = nullptr;
mpg123_close(_mh); }
mpg123_delete(_mh); if (_mh) {
_mh = nullptr; mpg123_close(_mh);
mpg123_delete(_mh);
_mh = nullptr;
}
} }
_err_msg.clear(); _err_msg.clear();
_response_code = 0; _response_code = 0;