|
Модераторы: xvr |
|
admsasha |
|
|||
Опытный Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: 1 Всего: 6 |
Требуется сделать без перезапуска программы обновление плагинов, которые реализованы через библиотеки.
Тестовый код простой
Проблема в том, что если во время sleep переписать libs/test.so, то программа на dlclose(handle) упадет. Как корректно завершить или отловить это событие ? Как почистить память от этой библиотеки, даже если она физические была заменена ? |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Если test.so именно переписать, то всё упадет не доходя до dlclose. Удалите сначала сам файл с test.so, а потом создавайте заново - должно работать. Если хотите, что бы ваша программа не зависила от перезаписи в полёте, то копируйте test.so во внутреннюю директорию (предварительно стерев оттуда предыдущую версию) и делайте dlopen оттуда |
|||
|
||||
admsasha |
|
|||
Опытный Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: 1 Всего: 6 |
Вот я так же подумывал. И скорее всего и придется так делать. Не очень красивое решение. |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Это не важно. Важно то, что библиотека при dlopen мапируется в память, и если вы ее в это время начинаете менять на файловой системе (например переписывать), то может измениться и образ в памяти (это зависит от того, как динамический загрузчик мапировал библиотеку в память). А dlclose потом полезет читать рантайм динамические данные, что бы удалить инфу о загруженной библиотеке из памяти. Если образ был изменен, то тот мусор, который прочтет линкер, может сломать всё. Если файл библиотеки сначала удалить, и лишь потом переписывать, то образ в памяти окажется привязан к предыдущей версии файла (которую удалили), а записываться будет новая - и в память это не попадет. |
|||
|
||||
admsasha |
|
|||
Опытный Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: 1 Всего: 6 |
||||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Не баг, а фича. Там же написано, что так и должно быть.
|
|||
|
||||
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |