Update of /cvsroot/boost-sandbox/boost-sandbox/boost/thread_safe_signals
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv2276/boost/thread_safe_signals
Modified Files:
connection.hpp
Removed Files:
multi_threaded.hpp single_threaded.hpp
Log Message:
Got rid of per-slot mutexes and ThreadingModel template parameter.
Use boost/detail/lightweight_mutex.hpp for the mutex now. Still
need to optimize locking so it doesn't lock the mutex once for
every slot during invocation.
Index: connection.hpp
===================================================================
RCS file: /cvsroot/boost-sandbox/boost-sandbox/boost/thread_safe_signals/connection.hpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- connection.hpp 27 Feb 2007 21:19:25 -0000 1.19
+++ connection.hpp 28 Feb 2007 20:48:30 -0000 1.20
@@ -25,6 +25,7 @@
#include <boost/mpl/bool.hpp>
#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
+#include <boost/thread_safe_signals/detail/signal_base.hpp>
#include <boost/thread_safe_signals/slot.hpp>
#include <boost/thread_safe_signals/track.hpp>
#include <boost/type_traits.hpp>
@@ -41,7 +42,8 @@
class ConnectionBodyBase
{
public:
- ConnectionBodyBase():
+ typedef signal_impl_base::mutex_type mutex_type;
+ ConnectionBodyBase(const shared_ptr<mutex_type> &mutex): _mutex(mutex),
_connected(true), _blocked(false)
{
}
@@ -62,40 +64,41 @@
return _blocked || (nolock_nograb_connected() == false);
}
bool nolock_nograb_connected() const {return _connected;}
+//FIXME: make _mutex protected once slot_call_iterator no longer needs it.
+ shared_ptr<mutex_type> _mutex;
protected:
mutable bool _connected;
bool _blocked;
};
- template<typename GroupKey, typename SlotType, typename ThreadingModel>
+ template<typename GroupKey, typename SlotType>
class ConnectionBody: public ConnectionBodyBase
{
public:
- typedef typename ThreadingModel::try_mutex_type mutex_type;
- ConnectionBody(const SlotType &slot_in):
- slot(slot_in)
+ ConnectionBody(const shared_ptr<mutex_type> &mutex, const SlotType &slot_in):
+ ConnectionBodyBase(mutex), slot(slot_in)
{
}
virtual ~ConnectionBody() {}
virtual void disconnect()
{
- typename mutex_type::scoped_lock lock(mutex);
+ typename mutex_type::scoped_lock lock(*_mutex);
nolock_disconnect();
}
virtual bool connected() const
{
- typename mutex_type::scoped_lock lock(mutex);
+ typename mutex_type::scoped_lock lock(*_mutex);
nolock_grab_tracked_objects();
return nolock_nograb_connected();
}
virtual void block(bool should_block)
{
- typename mutex_type::scoped_lock lock(mutex);
+ typename mutex_type::scoped_lock lock(*_mutex);
_blocked = should_block;
}
virtual bool blocked() const
{
- typename mutex_type::scoped_lock lock(mutex);
+ typename mutex_type::scoped_lock lock(*_mutex);
nolock_grab_tracked_objects();
return nolock_nograb_blocked();
}
@@ -125,7 +128,6 @@
return locked_objects;
}
SlotType slot;
- mutable mutex_type mutex;
private:
GroupKey _group_key;
};
--- single_threaded.hpp DELETED ---
--- multi_threaded.hpp DELETED ---
|