Update of /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv19310/src/libopenvrml/openvrml
Modified Files:
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.204
retrieving revision 1.205
diff -C2 -d -r1.204 -r1.205
*** browser.cpp 24 Feb 2007 07:39:11 -0000 1.204
--- browser.cpp 6 Mar 2007 03:26:15 -0000 1.205
***************
*** 5693,5696 ****
--- 5693,5697 ----
openvrml::browser::~browser() OPENVRML_NOTHROW
{
+ this->load_root_scene_thread_->join();
this->load_proto_thread_group_.join_all();
***************
*** 6190,6195 ****
OPENVRML_THROW2(std::bad_alloc, boost::thread_resource_error)
{
boost::function0<void> f = root_scene_loader(*this, url);
! boost::thread t(f);
}
--- 6191,6199 ----
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));
}
***************
*** 6261,6264 ****
--- 6265,6272 ----
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.62
retrieving revision 1.63
diff -C2 -d -r1.62 -r1.63
*** browser.h 22 Nov 2006 00:05:18 -0000 1.62
--- browser.h 6 Mar 2007 03:26:15 -0000 1.63
***************
*** 234,237 ****
--- 234,238 ----
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_;
|