Revert "[CONPRO-1333] Fix for crash in virtual device"
[platform/upstream/iotivity.git] / android / android_api / base / jni / JniListenerManager.h
index 5b1a2f6..8965e85 100644 (file)
@@ -35,9 +35,9 @@ template <class T>
 class JniListenerManager
 {
 public:
-    std::shared_ptr<T> addListener(JNIEnv* env, jobject jListener, JniOcResource* owner)
+    T* addListener(JNIEnv* env, jobject jListener, JniOcResource* owner)
     {
-        std::shared_ptr<T> onEventListener = nullptr;
+        T *onEventListener = nullptr;
 
         m_mapMutex.lock();
 
@@ -57,19 +57,19 @@ public:
 
         if (!onEventListener)
         {
-            onEventListener = std::make_shared<T>(env, jListener, owner);
+            onEventListener = new T(env, jListener, owner);
             jobject jgListener = env->NewGlobalRef(jListener);
 
             if (jgListener)
             {
                 m_listenerMap.insert(
                         std::pair<jobject,
-                        std::pair<std::shared_ptr<T>, int>>(jgListener,
-                        std::pair<std::shared_ptr<T>, int>(onEventListener, 1)));
+                        std::pair<T*, int>>(jgListener, std::pair<T*, int>(onEventListener, 1)));
             }
             else
             {
                 LOGD("OnEventListener: Failed to create global listener ref.");
+                delete onEventListener;
                 m_mapMutex.unlock();
                 return nullptr;
             }
@@ -81,9 +81,9 @@ public:
     }
 
 #ifdef WITH_CLOUD
-    std::shared_ptr<T> addListener(JNIEnv* env, jobject jListener, JniOcAccountManager* owner)
+    T* addListener(JNIEnv* env, jobject jListener, JniOcAccountManager* owner)
     {
-        std::shared_ptr<T> onEventListener = nullptr;
+        T *onEventListener = nullptr;
 
         m_mapMutex.lock();
 
@@ -103,19 +103,19 @@ public:
 
         if (!onEventListener)
         {
-            onEventListener = std::make_shared<T>(env, jListener, owner);
+            onEventListener = new T(env, jListener, owner);
             jobject jgListener = env->NewGlobalRef(jListener);
 
             if (jgListener)
             {
                 m_listenerMap.insert(
                         std::pair<jobject,
-                        std::pair<std::shared_ptr<T>, int>>(jgListener,
-                        std::pair<std::shared_ptr<T>, int>(onEventListener, 1)));
+                        std::pair<T*, int>>(jgListener, std::pair<T*, int>(onEventListener, 1)));
             }
             else
             {
                 LOGD("OnEventListener: Failed to create global listener ref.");
+                delete onEventListener;
                 m_mapMutex.unlock();
                 return nullptr;
             }
@@ -145,6 +145,8 @@ public:
                 else
                 {
                     env->DeleteGlobalRef(it->first);
+                    T* listener = refPair.first;
+                    delete listener;
                     m_listenerMap.erase(it);
                     LOGI("OnEventListener is removed");
                 }
@@ -163,6 +165,7 @@ public:
         {
             env->DeleteGlobalRef(pair.first);
             auto refPair = pair.second;
+            delete refPair.first;
         }
         m_listenerMap.clear();
 
@@ -170,7 +173,7 @@ public:
     }
 
 private:
-    std::map<jobject, std::pair<std::shared_ptr<T>, int>> m_listenerMap;
+    std::map<jobject, std::pair<T*, int>> m_listenerMap;
     std::mutex m_mapMutex;
 };