Błąd #774
Wyścig przy kończeniu EDP
0%
Opis
Objaw to komunikaty na konsoli przy kończeniu EDP:
edp_irp6ot_m: /usr/include/boost-1_42/boost/thread/pthread/mutex.hpp:45: boost::mutex::~mutex(): Assertion `!pthread_mutex_destroy(&m)' failed.
edp_irp6p_m: /usr/include/boost-1_42/boost/thread/pthread/mutex.hpp:45: boost::mutex::~mutex(): Assertion `!pthread_mutex_destroy(&m)' failed.
- załadować zadanie testowe, np.
configs/test/swarm_demo_irp6.ini
- EDP Load -> EDP Unload
Powtarzalność: u mnie zawsze.
Historia
#1 Uaktualnione przez Tomek Winiarski prawie 13 lat temu
- Zmieniono Przypisany do z Tomek Winiarski na Anonimowy
u mnie też ale nie mam pojecia co z tym zrobic. Probowalem ale nic nie wskórałem. Moze Ty coś wymyślisz.
#2 Uaktualnione przez Anonimowy prawie 13 lat temu
- Zmieniono Status z Nowy na Rozwiązany
Posprzątałem.
Na przyszłość - ja te problemy rozwiązuję zmieniając nagłówek boost/thread/pthread/mutex.hpp w ten sposób:
~mutex()
{
//BOOST_VERIFY(!pthread_mutex_destroy(&m));
if(pthread_mutex_destroy(&m)) {
sleep(15);
}
}
aby można było podczepić się gdb i zobaczyć pełny ślad wywołań.
W tym wypadku (jak w więszkości...?) rozwiązanie problemu polegało na konsekwentnym kończeniu wątków.Wzorzec sprowadza się do użycia:
- boost::this_thread::interruption_requested()
https://github.com/wut-rcprg/mrrocpp/blob/master/src/base/edp/edp_force_sensor.cc#L70
https://github.com/wut-rcprg/mrrocpp/blob/master/src/base/edp/manip_trans_t.cc#L36
https://github.com/wut-rcprg/mrrocpp/blob/master/src/base/edp/servo_gr.cc#L264 - boost::thread::interrupt()
- boost::thread::join()
https://github.com/wut-rcprg/mrrocpp/blob/master/src/robot/irp6ot_m/edp_irp6ot_m_effector.cc#L83
https://github.com/wut-rcprg/mrrocpp/blob/master/src/robot/irp6p_m/edp_irp6p_m_effector.cc#L91
https://github.com/wut-rcprg/mrrocpp/blob/master/src/base/edp/trans_t.h#L57
https://github.com/wut-rcprg/mrrocpp/blob/master/src/base/edp/servo_gr.cc#L618
Sprawie nie pomaga to, że identyfikator wątku trzymany jest w klasie bazowej, a powoływanie jest z klasy potomnej. Tego już nie ruszałem.
Proszę o zamknięcie po teście na robotach.
#3 Uaktualnione przez Tomek Winiarski ponad 10 lat temu
- Zmieniono Status z Rozwiązany na Odrzucony