Update of /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv13743/src/libopenvrml/openvrml
Modified Files:
browser.cpp browser.h
Log Message:
Protect browser::load_root_scene_thread_ with a read-write mutex.
Index: browser.cpp
===================================================================
RCS file: /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml/browser.cpp,v
retrieving revision 1.214
retrieving revision 1.215
diff -C2 -d -r1.214 -r1.215
*** browser.cpp 21 May 2007 03:37:01 -0000 1.214
--- browser.cpp 25 May 2007 06:13:06 -0000 1.215
***************
*** 5385,5388 ****
--- 5385,5396 ----
* @internal
*
+ * @var openvrml::read_write_mutex openvrml::browser::load_root_scene_thread_mutex_
+ *
+ * @brief Mutex protecting @c #load_root_scene_thread_.
+ */
+
+ /**
+ * @internal
+ *
* @var boost::scoped_ptr<boost::thread> openvrml::browser::load_root_scene_thread_
*
***************
*** 5769,5775 ****
--- 5777,5786 ----
openvrml::browser::~browser() OPENVRML_NOTHROW
{
+ read_write_mutex::scoped_read_lock
+ lock(this->load_root_scene_thread_mutex_);
if (this->load_root_scene_thread_) {
this->load_root_scene_thread_->join();
}
+
this->load_proto_thread_group_.join_all();
***************
*** 6285,6292 ****
OPENVRML_THROW2(std::bad_alloc, boost::thread_resource_error)
{
! if (this->load_root_scene_thread_) {
! this->load_root_scene_thread_->join();
}
boost::function0<void> f = root_scene_loader(*this, url);
this->load_root_scene_thread_.reset(new boost::thread(f));
}
--- 6296,6311 ----
OPENVRML_THROW2(std::bad_alloc, boost::thread_resource_error)
{
! {
! read_write_mutex::scoped_read_lock
! lock(this->load_root_scene_thread_mutex_);
! if (this->load_root_scene_thread_) {
! this->load_root_scene_thread_->join();
! }
}
+
boost::function0<void> f = root_scene_loader(*this, url);
+
+ read_write_mutex::scoped_write_lock
+ lock(this->load_root_scene_thread_mutex_);
this->load_root_scene_thread_.reset(new boost::thread(f));
}
Index: browser.h
===================================================================
RCS file: /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml/browser.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -C2 -d -r1.69 -r1.70
*** browser.h 21 May 2007 03:37:01 -0000 1.69
--- browser.h 25 May 2007 06:13:07 -0000 1.70
***************
*** 230,234 ****
--- 230,237 ----
const boost::scoped_ptr<null_node_metatype> null_node_metatype_;
const boost::scoped_ptr<null_node_type> null_node_type_;
+
+ read_write_mutex load_root_scene_thread_mutex_;
boost::scoped_ptr<boost::thread> load_root_scene_thread_;
+
boost::thread_group load_proto_thread_group_;
node_metatype_map node_metatype_map_;
|