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();
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;
}
}
#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();
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;
}
else
{
env->DeleteGlobalRef(it->first);
+ T* listener = refPair.first;
+ delete listener;
m_listenerMap.erase(it);
LOGI("OnEventListener is removed");
}
{
env->DeleteGlobalRef(pair.first);
auto refPair = pair.second;
+ delete refPair.first;
}
m_listenerMap.clear();
}
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;
};