From: Lukasz Bardeli Date: Wed, 29 Jul 2015 13:04:41 +0000 (+0200) Subject: [FMRadio] fix for FMRadio (fix crash) X-Git-Tag: submit/tizen_tv/20150803.021740^2^2~9^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1032fd686b3cdd52b230be0bd5ee473e91cfb954;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [FMRadio] fix for FMRadio (fix crash) [Verification] Code copmiles without error. Change-Id: I8be428a353b074e24e8a8b8b292e12aee81321df Signed-off-by: Lukasz Bardeli --- diff --git a/src/radio/radio_manager.cc b/src/radio/radio_manager.cc index aa7d14a3..72cfa5dc 100755 --- a/src/radio/radio_manager.cc +++ b/src/radio/radio_manager.cc @@ -35,6 +35,9 @@ using namespace std; namespace extension { namespace radio { +std::vector FMRadioManager::managers_; +std::mutex FMRadioManager::managers_mutex_; + namespace { const int kLowestFrequency = 87500; @@ -338,7 +341,11 @@ FMRadioManager::FMRadioManager(RadioInstance& instance) if (RADIO_ERROR_NONE != err) { LoggerE("radio_create() failed: %d", err); radio_instance_ = nullptr; + } else { + std::lock_guard lock(managers_mutex_); + managers_.push_back(this); } + } FMRadioManager::~FMRadioManager() { @@ -353,6 +360,23 @@ FMRadioManager::~FMRadioManager() { radio_instance_ = nullptr; } + std::lock_guard lock(managers_mutex_); + for (auto it = managers_.begin(); it != managers_.end(); it++) { + if (*it == this) { + managers_.erase(it); + break; + } + } +} + +bool FMRadioManager::CheckInstance(const FMRadioManager* manager) { + LoggerD("Entered"); + for (auto vec_manager : managers_) { + if (vec_manager == manager) { + return true; + } + } + return false; } PlatformResult FMRadioManager::Start(double frequency) { @@ -483,9 +507,13 @@ common::PlatformResult FMRadioManager::UnsetAntennaChangeListener() { } void FMRadioManager::PostMessage(const std::string& msg) const { + LoggerD("Enter"); + + if (!CheckInstance(this)) { + return; + } instance_.PostMessage(msg.c_str()); } - void FMRadioManager::PostResultSuccess(double callbackId, picojson::value* event) const { auto& obj = event->get(); diff --git a/src/radio/radio_manager.h b/src/radio/radio_manager.h index b047a3d9..75aad27c 100755 --- a/src/radio/radio_manager.h +++ b/src/radio/radio_manager.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -63,9 +64,13 @@ class FMRadioManager { void PostResultCallbackSuccess(double callbackId) const; void PostResultFailure(double callbackId, const common::PlatformResult& result) const; + static bool CheckInstance(const FMRadioManager* instance); private: RadioInstance& instance_; radio_h radio_instance_; + + static std::mutex managers_mutex_; + static std::vector managers_; }; } // namespace radio