Операционная система FreeBSD 4.10-RELEASE FreeBSD 4.10-RELEASE #0
С недавних пор демон, постоенный на потоках, стал периодически падать, gdb выдает следущее:
--------------------------------
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/mysql/libmysqlclient.so.10...done.
Reading symbols from /usr/lib/libstdc++.so.3...done.
Reading symbols from /usr/lib/libm.so.2...done.
Reading symbols from /usr/lib/libc_r.so.4...done.
Reading symbols from /usr/lib/libz.so.2...done.
Reading symbols from /usr/lib/libcrypt.so.2...done.
Reading symbols from /usr/lib/libc.so.4...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
#0 0x28180b31 in _waitq_remove () from /usr/lib/libc_r.so.4
(gdb) up
#1 0x28182ad5 in _thread_kern_scheduler () from /usr/lib/libc_r.so.4
(gdb)
#2 0x0 in ?? ()
(gdb)
Initial frame selected; you cannot go up.
(gdb)
-----------------------------------
Программа скомпилирована с отладочной инфой, но тут как видно, рушится в системной библиотеке /usr/lib/libc_r.so.4, причем бывает прога рушится вместо функции _waitq_remove() также в _waitq_insert().
С чем связаны грабли и как с ними бороться?
Доброй ночи. Давайте разбираться вместе.
Для начала скажите, с какими параметрами вы собирали программу.
К тому же, как мне кажется, libc_r.so и libc.so несовместимы. Ибо это одна и та же библиотека, только libc.so не поддерживает многопоточность, в отличие от libc_r.so.Жду ответов)
вот ключи компиляции программы:
-L/usr/lib/mysql -lmysqlclient -pthread -Wno-multichar -g -w -fno-rttiиз исходников (/usr/src/lib/) видно, что libc_r - библиотека потоков, а libc - библиотека стандартных функций
-----
если говорить о коде, вот все функции, которые у меня используются для потоков:
pthread_attr_init
pthread_attr_setstacksize
pthread_cond_signal
pthread_cond_timedwait
pthread_cond_wait
pthread_create
pthread_join
pthread_mutex_lock
pthread_mutex_unlock
pthread_rwlock_rdlock
pthread_rwlock_unlock
pthread_rwlock_wrlockвсе стандартно: создание, мутексы и сигналы.
Уверен на 99.99999999% что проблема лежит где -то в Вашем коде.
Без него никто Вам не поможет. Судя по Вашему описанию демон работал, а это значит, что изменились данные которые он использует. Вероятно вследствии этого Вы и получаете Segmentation Fault. Мой совет: попробуйте отключая функциональность программы локализовать место ошибки. Под отключением я понимаю комментарии и/или функции заглушки.Удачи
--- sas>Операционная система FreeBSD 4.10-RELEASE FreeBSD 4.10-RELEASE #0
>С недавних пор демон, постоенный на потоках, стал периодически падать, gdb выдает
>следущее:
>--------------------------------
>Program terminated with signal 11, Segmentation fault.
>Reading symbols from /usr/lib/mysql/libmysqlclient.so.10...done.
>Reading symbols from /usr/lib/libstdc++.so.3...done.
>Reading symbols from /usr/lib/libm.so.2...done.
>Reading symbols from /usr/lib/libc_r.so.4...done.
>Reading symbols from /usr/lib/libz.so.2...done.
>Reading symbols from /usr/lib/libcrypt.so.2...done.
>Reading symbols from /usr/lib/libc.so.4...done.
>Reading symbols from /usr/libexec/ld-elf.so.1...done.
>#0 0x28180b31 in _waitq_remove () from /usr/lib/libc_r.so.4
>(gdb) up
>#1 0x28182ad5 in _thread_kern_scheduler () from /usr/lib/libc_r.so.4
>(gdb)
>#2 0x0 in ?? ()
>(gdb)
>Initial frame selected; you cannot go up.
>(gdb)
>-----------------------------------
>Программа скомпилирована с отладочной инфой, но тут как видно, рушится в системной
>библиотеке /usr/lib/libc_r.so.4, причем бывает прога рушится вместо функции _waitq_remove() также в
>_waitq_insert().
>С чем связаны грабли и как с ними бороться?