Skip to content
Snippets Groups Projects
Commit 53ad09d4 authored by Joseph Mirabel's avatar Joseph Mirabel Committed by olivier stasse
Browse files

Fix possible dead-lock in RosPublish if a signal throws an exception.

parent 4e7542fe
No related branches found
No related tags found
No related merge requests found
...@@ -220,9 +220,10 @@ namespace dynamicgraph ...@@ -220,9 +220,10 @@ namespace dynamicgraph
} }
//lock the mutex to avoid deleting the signal during a call to trigger //lock the mutex to avoid deleting the signal during a call to trigger
boost::mutex::scoped_lock lock (mutex_);
signalDeregistration(signal); signalDeregistration(signal);
bindedSignal_.erase (signal); bindedSignal_.erase (signal);
mutex_.unlock();
} }
std::string RosPublish::list () const std::string RosPublish::list () const
...@@ -262,13 +263,14 @@ namespace dynamicgraph ...@@ -262,13 +263,14 @@ namespace dynamicgraph
nextPublication_ = ros::Time::now() + rate_; nextPublication_ = ros::Time::now() + rate_;
boost::mutex::scoped_lock lock (mutex_);
while(! mutex_.try_lock() ){} while(! mutex_.try_lock() ){}
for (iterator_t it = bindedSignal_.begin (); for (iterator_t it = bindedSignal_.begin ();
it != bindedSignal_.end (); ++it) it != bindedSignal_.end (); ++it)
{ {
boost::get<1>(it->second) (t); boost::get<1>(it->second) (t);
} }
mutex_.unlock();
return dummy; return dummy;
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# include <boost/shared_ptr.hpp> # include <boost/shared_ptr.hpp>
# include <boost/tuple/tuple.hpp> # include <boost/tuple/tuple.hpp>
# include <boost/interprocess/sync/interprocess_mutex.hpp> # include <boost/thread/mutex.hpp>
# include <dynamic-graph/entity.h> # include <dynamic-graph/entity.h>
# include <dynamic-graph/signal-time-dependent.h> # include <dynamic-graph/signal-time-dependent.h>
...@@ -94,7 +94,7 @@ namespace dynamicgraph ...@@ -94,7 +94,7 @@ namespace dynamicgraph
dynamicgraph::SignalTimeDependent<int,int> trigger_; dynamicgraph::SignalTimeDependent<int,int> trigger_;
ros::Duration rate_; ros::Duration rate_;
ros::Time nextPublication_; ros::Time nextPublication_;
boost::interprocess::interprocess_mutex mutex_; boost::mutex mutex_;
}; };
} // end of namespace dynamicgraph. } // end of namespace dynamicgraph.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment