madf: (Default)
madf ([personal profile] madf) wrote2011-07-06 04:48 pm

Чим краще тим гірше

Є у мене одна софтинка, написана для GTS, якою я пишаюсь. CMake, Boost, ключі і конфігураційний файл, плагіни, дуже ідіоматично написана, близько до мого ідеалу. . І у ній знайшлась дуже тупа бага. В залежності від типу зборки вона або взагалі не падала, або падала з таким повідомленням:
nfa: /usr/include/boost/thread/pthread/mutex.hpp:50: void boost::mutex::lock(): Assertion `!pthread_mutex_lock(&m)' failed.

або з таким:
nfa: pthread_mutex_lock.c:312: __pthread_mutex_lock_full: Assertion `(-(e)) != 3 || !robust' failed.

При чому падала тільки у production, локально усе було нормально. А проблема виявилась у неправильному порядку слідування членів класу плагіну. thread ініціалізувався і запускався раніше ніж ініціалізувався mutex. І у production він встигав спробувати цей mutex захопити.
Дивно інше: як так вийшло що я не проганяв перед релізом софтинку через valgrind?

PS: ні, я у GTS не повернувся. Просто виконую деякі їх побажання за домовленістю.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting