Looks like it's because you're not calling ros::shutdown() before you unload the plugin. Josh On Sun, Sep 12, 2010 at 5:59 AM, Ruben Smits wrote: > On Saturday 11 September 2010 20:03:48 Josh Faust wrote: > > init() shouldn't be blocking -- if it does it's a bug. It's designed > this > > way so you can call ros::master::check(). Creation of the first > > NodeHandle or calling start() should be what's blocking. > > Ok, sorry for the mistake, it was indeed ros::start() that blocked my code. > I > changed it into the following: > > bool loadRTTPlugin(RTT::TaskContext* c){ > log(Info)<<"Initializing ROS node"< if(!ros::isInitialized()){ > int argc=0; > char* argv[0]; > ros::init(argc,argv,"rtt",ros::init_options::AnonymousName); > if(ros::master::check()) > ros::start(); > else{ > log(Error)<<"No ros::master available"< return false; > } > } > static ros::AsyncSpinner spinner(1); // Use 1 threads > spinner.start(); > log(Info)<<"ROS node spinner started"< return true; > } > > But now I get the the following assertion: > > 0.719 [ ERROR ][DeploymentComponent::import] No ros::master available > 0.719 [ ERROR ][DeploymentComponent::import] Failed to load RTT Plugin > 'ros_integration': plugin refused to load into this process. Unloading. > deployer-gnulinux: /usr/include/boost/thread/pthread/mutex.hpp:50: void > boost::mutex::lock(): Assertion `!pthread_mutex_lock(&m)' failed. > > Program received signal SIGABRT, Aborted. > 0x00007ffff4caca75 in *__GI_raise (sig=) > at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 > 64 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory. > in ../nptl/sysdeps/unix/sysv/linux/raise.c > (gdb) bt > #0 0x00007ffff4caca75 in *__GI_raise (sig=) > at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 > #1 0x00007ffff4cb05c0 in *__GI_abort () at abort.c:92 > #2 0x00007ffff4ca5941 in *__GI___assert_fail ( > assertion=0x7ffff124f7e5 "!pthread_mutex_lock(&m)", > file=, line=50, > function=0x7ffff124f9a0 "void boost::mutex::lock()") at assert.c:81 > #3 0x00007ffff12453db in boost::mutex::lock (loc=0x7ffff1beea20, > name=..., level=ros::console::levels::Debug) > at /usr/include/boost/thread/pthread/mutex.hpp:50 > #4 boost::unique_lock::lock (loc=0x7ffff1beea20, name=..., > level=ros::console::levels::Debug) > at /usr/include/boost/thread/locks.hpp:338 > #5 unique_lock (loc=0x7ffff1beea20, name=..., > level=ros::console::levels::Debug) > at /usr/include/boost/thread/locks.hpp:224 > #6 ros::console::initializeLogLocation (loc=0x7ffff1beea20, name=..., > level=ros::console::levels::Debug) > at > /opt/ros/cturtle/ros/core/rosconsole/src/rosconsole/rosconsole.cpp:6--- > Type to continue, or q to quit--- > 10 > #7 0x00007ffff1923e4a in ros::atexitCallback () > at /opt/ros/cturtle/ros/core/roscpp/src/libros/init.cpp:149 > #8 0x00007ffff4cb2630 in __cxa_finalize (d=0x7ffff1bee000) > at cxa_finalize.c:56 > #9 0x00007ffff18f23d6 in __do_global_dtors_aux () > from /opt/ros/cturtle/ros/core/roscpp/lib/libros.so > #10 0x0000000000000015 in ?? () > #11 0x00007fffffffc8d0 in ?? () > #12 0x00007ffff19abc81 in _fini () > from /opt/ros/cturtle/ros/core/roscpp/lib/libros.so > #13 0x0000000000000032 in ?? () > #14 0x00007ffff7df0972 in _dl_close_worker (map=) > at dl-close.c:271 > #15 0x0000000000680f80 in ?? () > > Another question: > > Would it be possible to start my own master if none is available? Can it be > done using ros::master::init()? > > Ruben > > Josh > > > > On Sat, Sep 11, 2010 at 7:53 AM, Ruben Smits > > > > wrote: > > Hi, > > > > I would like to know if there is a way to call ros::init and not block > > untill a ros::master is available but just return an error or the like if > > a ros::master is not available so that my code can continue. > > > > Ruben > > _______________________________________________ > > ros-users mailing list > > ros-users@code.ros.org > > https://code.ros.org/mailman/listinfo/ros-users > _______________________________________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users >