From 4fba37f688ff674c60c5733eaccb30187c5f0d09 Mon Sep 17 00:00:00 2001 From: philippegorley Date: Mon, 10 Dec 2018 10:25:19 -0500 Subject: [PATCH] localrecorder: fix crash on stop Change-Id: I11ac40fa68bf6bd94d5aaae9246e5bd1e1a556b6 --- src/media/localrecorder.cpp | 13 +++++++++---- src/media/localrecorder.h | 10 ++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/media/localrecorder.cpp b/src/media/localrecorder.cpp index 4a995e9c1..67b54eb5f 100644 --- a/src/media/localrecorder.cpp +++ b/src/media/localrecorder.cpp @@ -36,6 +36,12 @@ LocalRecorder::LocalRecorder(const bool& audioOnly) recorder_->audioOnly(audioOnly); } +LocalRecorder::~LocalRecorder() +{ + if (isRecording()) + stopRecording(); +} + void LocalRecorder::setPath(const std::string& path) { @@ -94,15 +100,14 @@ LocalRecorder::startRecording() void LocalRecorder::stopRecording() { - Recordable::stopRecording(); - Manager::instance().getRingBufferPool().unBindHalfDuplexOut(path_, RingBufferPool::DEFAULT_ID); if (auto ob = recorder_->getStream(audioInput_->getInfo().name)) audioInput_->detach(ob); if (videoInput_) if (auto ob = recorder_->getStream(videoInput_->getInfo().name)) videoInput_->detach(ob); - audioInput_.reset(); - videoInput_.reset(); + Manager::instance().getRingBufferPool().unBindHalfDuplexOut(path_, RingBufferPool::DEFAULT_ID); + // NOTE stopRecording should be last call to avoid data races + Recordable::stopRecording(); } } // namespace ring diff --git a/src/media/localrecorder.h b/src/media/localrecorder.h index 26a786481..1514a565e 100644 --- a/src/media/localrecorder.h +++ b/src/media/localrecorder.h @@ -40,13 +40,8 @@ namespace ring { class LocalRecorder : public Recordable { public: - /** - * Constructor of a LocalRecorder. - * Passed VideoInput pointer will be used for recording. - * If input pointer in null, video recording will be disabled on this - * recorder. - */ LocalRecorder(const bool& audioOnly); + ~LocalRecorder(); /** * Start local recording. Return true if recording was successfully @@ -54,6 +49,9 @@ class LocalRecorder : public Recordable { */ bool startRecording(); + /** + * Stops recording. + */ void stopRecording(); /** -- 2.22.0