From: Piotr Kosko Date: Mon, 21 Nov 2016 06:13:32 +0000 (+0100) Subject: [Convergence] Fixed Payload types and new-instance issue X-Git-Tag: submit/tizen/20161128.110522^2~11^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=83696f66c9ed89a6a006b35da61e43904d2f5cfa;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Convergence] Fixed Payload types and new-instance issue [Features] Removed Payload as exported objects types When creating new instance, ConvergenceManager object could hold reference to previous one, this is fixed by reseting manager object. [Verification] Running test AppCommunicationService_getClientList multiple times is now possible. Before change second run blocks cause of bad ConvergenceInstance reference. Change-Id: If703172fee8a5342680e314bd5a443c14c7c2108 Signed-off-by: Piotr Kosko --- diff --git a/src/convergence/convergence_extension.cc b/src/convergence/convergence_extension.cc index 08999335..6e39e0ca 100644 --- a/src/convergence/convergence_extension.cc +++ b/src/convergence/convergence_extension.cc @@ -34,8 +34,6 @@ ConvergenceExtension::ConvergenceExtension() { "tizen.AppCommunicationServerService", "tizen.AppCommunicationClientService", "tizen.ChannelInfo", - "tizen.PayloadString", - "tizen.PayloadRawBytes", nullptr }; SetExtraJSEntryPoints(entry_points); diff --git a/src/convergence/convergence_instance.cc b/src/convergence/convergence_instance.cc index 02a5e0eb..89e00316 100644 --- a/src/convergence/convergence_instance.cc +++ b/src/convergence/convergence_instance.cc @@ -93,6 +93,7 @@ ConvergenceInstance::ConvergenceInstance() { } ConvergenceInstance::~ConvergenceInstance() { + ConvergenceManager::GetInstance(this).ResetInternalData(); } void ConvergenceInstance::ReplyAsync(ConvergenceCallbacks callback_function_type, @@ -141,7 +142,10 @@ void ConvergenceInstance::ReplyAsync(ConvergenceCallbacks callback_function_type picojson::value result = picojson::value(param); LoggerD("---> %s", result.serialize().c_str()); // TODO remove - PostMessage(result.serialize().c_str()); + + TaskQueue::GetInstance().Async([this, result]() { + Instance::PostMessage(this, result.serialize().c_str()); + }); } common::TizenResult ConvergenceInstance::ConvergenceManagerStartDiscovery(const picojson::object& args, diff --git a/src/convergence/convergence_manager.cc b/src/convergence/convergence_manager.cc index 3479b90d..e7ae08fe 100644 --- a/src/convergence/convergence_manager.cc +++ b/src/convergence/convergence_manager.cc @@ -82,6 +82,31 @@ ConvergenceManager::~ConvergenceManager() { convergence_manager_ = nullptr; } +void ConvergenceManager::ResetInternalData() { + ScopeLogger(); + // Releasing all registered devices + for (auto it = registered_devices_.begin(); it != registered_devices_.end(); ++it) { + delete it->second; + } + registered_devices_.clear(); + + // release handle + int error = conv_destroy(convergence_manager_); + if (CONV_ERROR_NONE != error) { + // Handle error + trace_conv_error(error, __LINE__, "conv_destroy"); + } + convergence_manager_ = nullptr; + convergence_plugin_ = nullptr; + + // create native handle + error = conv_create(&convergence_manager_); + if (CONV_ERROR_NONE != error) { + // Handle error + trace_conv_error(error, __LINE__, "conv_create"); + } +} + ConvergenceDevice *ConvergenceManager::SwapDevice(const char *device_id, conv_device_h device_handle) { ScopeLogger(); diff --git a/src/convergence/convergence_manager.h b/src/convergence/convergence_manager.h index 4b61407a..2d8c5d9a 100644 --- a/src/convergence/convergence_manager.h +++ b/src/convergence/convergence_manager.h @@ -56,6 +56,8 @@ class ConvergenceManager { ConvergenceService *RegisterLocalService(const char *device_id, const int service_type); + void ResetInternalData(); + private: static void DiscoveryCb(conv_device_h device_handle, conv_discovery_result_e result, void* user_data);