Mercurial > love-experiments
diff src/modules/thread/Channel.cpp @ 1101:025c67973ad4 minor
Make Channels more thread-safe (I know, I know..)
| author | Bart van Strien <bart.bes+projects@gmail.com> |
|---|---|
| date | Wed, 04 Jul 2012 20:22:54 +0200 |
| parents | a74672ba1320 |
| children | fc7143cc0818 |
line wrap: on
line diff
--- a/src/modules/thread/Channel.cpp Wed Jul 04 17:15:16 2012 +0200 +++ b/src/modules/thread/Channel.cpp Wed Jul 04 20:22:54 2012 +0200 @@ -65,10 +65,7 @@ delete mutex; delete cond; if (named) - { - Lock l(namedChannelMutex); namedChannels.erase(name); - } } void Channel::push(Variant *var) @@ -133,6 +130,11 @@ void Channel::clear() { Lock l(mutex); + + // We're already empty. + if (queue.empty()) + return; + while (!queue.empty()) { queue.front()->release(); @@ -144,5 +146,16 @@ if (named) release(); } + + void Channel::release() + { + if (named) + namedChannelMutex->lock(); + + Object::release(); + + if (named) + namedChannelMutex->unlock(); + } } // thread } // love
