Поймать sigsegv в других общих библиотеках (система плагинов)
Я написал систему плагинов (основанную на общих библиотеках, которые я загружаю / выгружаю с dlopen
/dlclose
), который работает довольно хорошо.
Моя проблема в том, что если один из плагинов (библиотек) содержит внутреннюю ошибку, которая является фатальной для всего выполнения (например, допустим, какое-то нарушение сегментации), вся программа падает.
Я бы хотел этого избежать. Я знаю, что есть возможность ловить такие сигналы, как SIGSEGV
(с signal.h
Я думаю). Но мне интересно, действительно ли это правильный подход в этом случае.
Также моя программа многопоточная. И поэтому я должен знать, какой плагин (или, по крайней мере, какой поток) генерировал ошибку.
На самом деле я просто хочу перезагрузить библиотеку в случае фатальной ошибки (или полностью выгрузить ее после истечения времени ожидания). Что такое "стандартный" способ сделать это?