From 48767a7a29151f69060808fdc761f58da4379ff3 Mon Sep 17 00:00:00 2001 From: Przemyslaw Ciezkowski Date: Thu, 21 May 2015 15:50:31 +0200 Subject: [PATCH] [FMRadio] Prevent duplicating FMRadioManager std::bind was copying whole object. [Verification] Fixes crash in FMRadioScanCallback_onfinished Change-Id: I2736ef4ca4c28c80c9a9a4bb1c556870bc58e62f Signed-off-by: Przemyslaw Ciezkowski --- src/radio/radio_manager.cc | 6 +++--- src/radio/radio_manager.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/radio/radio_manager.cc b/src/radio/radio_manager.cc index ffe2fbe4..d9c66422 100755 --- a/src/radio/radio_manager.cc +++ b/src/radio/radio_manager.cc @@ -142,8 +142,8 @@ void ScanStartCallback(int frequency, void* user_data) { &FMRadioManager::PostMessage, &data->manager_, event.serialize())); } -void PostAsyncSuccess(FMRadioManager& manager, double callbackId, picojson::value* event) { - manager.PostResultSuccess(callbackId, event); +void PostAsyncSuccess(FMRadioManager* manager, double callbackId, picojson::value* event) { + manager->PostResultSuccess(callbackId, event); delete event; } @@ -163,7 +163,7 @@ void ScanCompleteCallback(void* user_data) { obj.insert(std::make_pair("frequencies", picojson::value(frequencies))); common::TaskQueue::GetInstance().Async(std::bind(&PostAsyncSuccess, - data->manager_, data->callback_id_, event)); + &data->manager_, data->callback_id_, event)); delete data; } diff --git a/src/radio/radio_manager.h b/src/radio/radio_manager.h index 916c4d72..d843cd1b 100755 --- a/src/radio/radio_manager.h +++ b/src/radio/radio_manager.h @@ -23,6 +23,8 @@ class RadioInstance; class FMRadioManager { public: explicit FMRadioManager(RadioInstance& instance); + // FMRadioManager destroys radio_h in destructor, so it cannot be copyable + FMRadioManager(const FMRadioManager& other) = delete; ~FMRadioManager(); common::PlatformResult Start(double freq); -- 2.34.1