From: Braden M. <br...@us...> - 2007-05-25 06:13:07
|
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_; |