[FMRadio] Prevent duplicating FMRadioManager
authorPrzemyslaw Ciezkowski <p.ciezkowski@samsung.com>
Thu, 21 May 2015 13:50:31 +0000 (15:50 +0200)
committerPrzemyslaw Ciezkowski <p.ciezkowski@samsung.com>
Thu, 21 May 2015 13:50:31 +0000 (15:50 +0200)
std::bind was copying whole object.

[Verification]
Fixes crash in FMRadioScanCallback_onfinished

Change-Id: I2736ef4ca4c28c80c9a9a4bb1c556870bc58e62f
Signed-off-by: Przemyslaw Ciezkowski <p.ciezkowski@samsung.com>
src/radio/radio_manager.cc
src/radio/radio_manager.h

index ffe2fbe4d83d25fbc0a58737f91f6af82cb80a58..d9c66422b72fa94723c58df94e2ed60d30450f07 100755 (executable)
@@ -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;
 }
index 916c4d7232bfc7bebe49174d20c104bdb48cfd53..d843cd1b289c103e1a36e69128925a049bc3f52b 100755 (executable)
@@ -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);