[Comm] pthread, gcc vs g++: seg fault

Rinat Bikov bikoz.r на gmail.com
Чт Ноя 5 11:02:57 UTC 2009


Здравствуйте, уважаемые!
Передо мной стоит задача: написать динамическую библиотеку, которая
могла бы загружать и выгружать другие динамические библиотеки из
главной функции таким образом, чтобы загружаемые динамические
библиотеки имели доступ к интерфейсу загружающей их динамической
библиотеки (:-)).
Притом загружаемые динамические библиотеки могут зацикливаться,
соответственно необходимо, чтобы они убивались по таймауту.
Для решения этой задачи я решил воспользоваться pthreads.
Проблему того, что потоки с зацикливающейся функцией не убиваются
стандартно pthread_cancel решил при помощи отправки
pthread_kill(SIGTERM) + добавил обработчик этого сигнала в потоке:
signal(SIGTERM, sig_handler);
При компиляции программы под gcc никаких нареканий не возникает:
программа работает без ошибок.
При компиляции программы под g++ в некоторых случаях программа
завершается с segmentation fault.
Притом последовательность вызова функций в самой программе
детерминирована (единственный фактор, который может влиять на
недетерминированность работы программы - это то, что у меня
двухяъдерный процессор, но в случае корректной работы программы и это
не должно влиять на выполнение).
Вопрос: из-за чего может быть вызвано такое поведение программы? И как
эту проблему можно решить?


P.S. К письму прилагаются исходные коды и скрипт для
компиляции/очистки (Makefile пока не изучал :-)).
Также прилагается strace удачного и неудачного запуска.
Перед первый запуском в консоли выполняю команду:
$ export LD_LIBRARY_PATH=.
Для компиляции необходимы glibc-devel, glibc-pthread.

-- 
С уважением, Ринат Биков.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : so.zip
Тип     : application/zip
Размер  : 8693 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20091105/89a0b2f8/attachment-0001.zip>


Подробная информация о списке рассылки community