[Convergence] Fixed Payload types and new-instance issue 74/99674/3
authorPiotr Kosko <p.kosko@samsung.com>
Mon, 21 Nov 2016 06:13:32 +0000 (07:13 +0100)
committerPiotr Kosko <p.kosko@samsung.com>
Thu, 24 Nov 2016 13:26:28 +0000 (14:26 +0100)
[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 <p.kosko@samsung.com>
src/convergence/convergence_extension.cc
src/convergence/convergence_instance.cc
src/convergence/convergence_manager.cc
src/convergence/convergence_manager.h

index 089993358508e5553a9eb88cb49d4a6d5009b4a3..6e39e0ca13120de99cce276f05a8b8ef93ec83fa 100644 (file)
@@ -34,8 +34,6 @@ ConvergenceExtension::ConvergenceExtension() {
       "tizen.AppCommunicationServerService",
       "tizen.AppCommunicationClientService",
       "tizen.ChannelInfo",
-      "tizen.PayloadString",
-      "tizen.PayloadRawBytes",
       nullptr
     };
   SetExtraJSEntryPoints(entry_points);
index 02a5e0eb20836607dd682c596cfddaee8b3b00a8..89e00316f6617d5b97b152cd8de9ba755c9a984a 100644 (file)
@@ -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,
index 3479b90d9d06dad84cc2831cbab5fe3fa8e82546..e7ae08fedb7372a2d757bb60fc8b83026390a7e2 100644 (file)
@@ -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();
index 4b61407ac37420bd0eb5a5713b6ce0c74d90e9b0..2d8c5d9a905d130cd1b664b5c826e2e1149d8d90 100644 (file)
@@ -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);