Update of /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv18937/src/libopenvrml/openvrml
Modified Files:
Tag: OpenVRML-0_16-BRANCH
browser.cpp browser.h
Log Message:
Join the thread spawned by browser::load_url in browser's destructor.
Index: browser.cpp
===================================================================
RCS file: /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml/browser.cpp,v
retrieving revision 1.190.2.10
retrieving revision 1.190.2.11
diff -C2 -d -r1.190.2.10 -r1.190.2.11
*** browser.cpp 24 Feb 2007 07:38:58 -0000 1.190.2.10
--- browser.cpp 6 Mar 2007 03:25:59 -0000 1.190.2.11
***************
*** 5523,5526 ****
--- 5523,5527 ----
openvrml::browser::~browser() OPENVRML_NOTHROW
{
+ this->load_root_scene_thread_->join();
this->load_proto_thread_group_.join_all();
***************
*** 6155,6160 ****
OPENVRML_THROW2(std::bad_alloc, boost::thread_resource_error)
{
boost::function0<void> f = root_scene_loader(*this, url);
! boost::thread t(f);
}
--- 6156,6164 ----
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));
}
***************
*** 6226,6229 ****
--- 6230,6237 ----
parse_vrml(in, stream_id.str(), type, *this->scene_, nodes, meta);
} catch (openvrml::bad_media_type & ex) {
+ //
+ // bad_media_type is a std::runtime_error. However, here we're using
+ // the media type as an argument.
+ //
throw std::invalid_argument(ex.what());
}
Index: browser.h
===================================================================
RCS file: /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml/browser.h,v
retrieving revision 1.61
retrieving revision 1.61.2.1
diff -C2 -d -r1.61 -r1.61.2.1
*** browser.h 28 Jul 2006 07:04:19 -0000 1.61
--- browser.h 6 Mar 2007 03:25:59 -0000 1.61.2.1
***************
*** 221,224 ****
--- 221,225 ----
std::auto_ptr<null_node_metatype> null_node_metatype_;
std::auto_ptr<null_node_type> null_node_type_;
+ boost::scoped_ptr<boost::thread> load_root_scene_thread_;
boost::thread_group load_proto_thread_group_;
node_metatype_map node_metatype_map_;
|