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);