Projekt

Ogólne

Profil

Błąd #774

Wyścig przy kończeniu EDP

Dodane przez Anonimowy prawie 13 lat temu. Zaktualizowane ponad 10 lat temu.

Status:
Odrzucony
Priorytet:
Niski
Przypisany do:
-
Kategoria:
EDP
Data rozpoczęcia:
2012-02-10
Data oddania:
% Wykonania:

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.

Sposób wywołania:
  1. załadować zadanie testowe, np. configs/test/swarm_demo_irp6.ini
  2. 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:
  1. 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
  2. boost::thread::interrupt()
  3. 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

Eksportuj do Atom PDF