diff --git a/src/common/Object.h b/src/common/Object.h index 78a84484c..5cc04c349 100644 --- a/src/common/Object.h +++ b/src/common/Object.h @@ -59,14 +59,14 @@ public: * Retains the Object, i.e. increases the * reference count by one. **/ - virtual void retain(); + void retain(); /** * Releases one reference to the Object, i.e. decrements the * reference count by one, and potentially deletes the Object * if there are no more references. **/ - virtual void release(); + void release(); private: diff --git a/src/modules/thread/Channel.cpp b/src/modules/thread/Channel.cpp index e36e69db7..f85526eda 100644 --- a/src/modules/thread/Channel.cpp +++ b/src/modules/thread/Channel.cpp @@ -58,12 +58,17 @@ Channel *Channel::getChannel(const std::string &name) if (!namedChannelMutex) namedChannelMutex = newMutex(); - Lock l(namedChannelMutex); - if (!namedChannels.count(name)) - namedChannels[name] = new Channel(name); - else - namedChannels[name]->retain(); + Lock lock(namedChannelMutex); + auto it = namedChannels.find(name); + + if (it != namedChannels.end()) + { + it->second->retain(); + return it->second; + } + + namedChannels[name] = new Channel(name); return namedChannels[name]; } @@ -92,7 +97,10 @@ Channel::~Channel() delete cond; if (named) + { + Lock l(namedChannelMutex); namedChannels.erase(name); + } } unsigned long Channel::push(const Variant &var) @@ -196,22 +204,5 @@ void Channel::unlockMutex() mutex->unlock(); } -void Channel::retain() -{ - EmptyLock l; - if (named) - l.setLock(namedChannelMutex); - - Object::retain(); -} - -void Channel::release() -{ - EmptyLock l; - if (named) - l.setLock(namedChannelMutex); - - Object::release(); -} } // thread } // love diff --git a/src/modules/thread/Channel.h b/src/modules/thread/Channel.h index b7ddedc74..da98f9da9 100644 --- a/src/modules/thread/Channel.h +++ b/src/modules/thread/Channel.h @@ -54,9 +54,6 @@ public: int getCount(); void clear(); - void retain(); - void release(); - private: Channel(const std::string &name); diff --git a/src/modules/thread/ThreadModule.cpp b/src/modules/thread/ThreadModule.cpp index c3b30277d..32a6c30ea 100644 --- a/src/modules/thread/ThreadModule.cpp +++ b/src/modules/thread/ThreadModule.cpp @@ -27,8 +27,7 @@ namespace thread LuaThread *ThreadModule::newThread(const std::string &name, love::Data *data) { - LuaThread *lt = new LuaThread(name, data); - return lt; + return new LuaThread(name, data); } Channel *ThreadModule::newChannel()