powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не выгружается fbclient.dll (FB 2.5 и 3)
25 сообщений из 27, страница 1 из 2
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332127
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователи стали жаловаться на ошибку "connection shutdown", периодически возникающую при работе с экспертом (и не только).
Стал копать и обнаружил, что при каких-то условиях FreeLibrary не выгружает fbclient.dll и все остальное, что она использует.

Т.е., имеем такую последовательность:
1. Загружаем fbclient.dll в память процесса.
2. Коннект и работа с базой...
3. Дисконнект.
4. Вызов fb_shutdown.
5. FreeLibrary.

После чего fbclient и иже с ним остаются болтаться в памяти процесса, а повторный коннект приводит к упомянутой ошибке.

В порядке бреда: есть подозрение, что что-то из загружаемого самой fbclient.dll опять же ее и грузит, увеличивая счетчик ссылок. А потом не выгружает.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332128
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

какая версия fbclient ? В 3.0.0 есть существенные изменения
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332129
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladкакая версия fbclient ? В 3.0.0 есть существенные изменения

Я у себя воспроизвел на 3.0.1.32575 с зашифрованной базой (грузится fbcrypt.dll).
А у пользователей точно не знаю. Одному ссылку на топик отправил. Если сам не заглянет - уточню.
Другой 2.5 использует, точную версию тоже не знаю.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332167
bazilio77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExperthvladкакая версия fbclient ? В 3.0.0 есть существенные изменения

Я у себя воспроизвел на 3.0.1.32575 с зашифрованной базой (грузится fbcrypt.dll).
А у пользователей точно не знаю. Одному ссылку на топик отправил. Если сам не заглянет - уточню.

3.0.0.32483
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332173
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertТ.е., имеем такую последовательность:
1. Загружаем fbclient.dll в память процесса.
2. Коннект и работа с базой...
3. Дисконнект.
4. Вызов fb_shutdown.
5. FreeLibrary.А с какой версии IBE стал вызывать fb_shutdown ?
Мой не вызывает, но он не свеж :)
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332240
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladА с какой версии IBE стал вызывать fb_shutdown ?


Да уж полгода как, в марте месяце соответствующие изменения в коде внесены. А вот проблемы стали возникать совсем недавно.
Причем пользователи говорят, что одна и та же софтина на одном компе работает без проблем, а на другом выдает "connection shutdown".

Кстати, помнишь, когда обсуждали использование fb_shutdown, я говорил, что возможны проблемы, если коннект создается и прибивается каким-нибудь пользовательским плагином? Так вот, это уже реальность.
Пользователь в своей софтине юзает IBO и IBEScript.dll, которые шарят одну и ту же клиентскую библиотеку. Соответственно, если IBEScript.dll создал свой коннект, выполнил скрипт, прибил коннект, вызвал fb_shutdown - все, приплыли...
Пока выкрутились загрузкой отдельного экземпляра fbclient с другим путем, но таки проблема уже не умозрительна.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332253
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertСоответственно, если IBEScript.dll создал свой коннект, выполнил скрипт, прибил коннект, вызвал fb_shutdown - все, приплыли...fb_shutdown нужно вызывать только перед выгрузкой fbclient, а не после каждого дисконнекта.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332269
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladfb_shutdown нужно вызывать только перед выгрузкой fbclient, а не после каждого дисконнекта.

LoadLibrary (application)
LoadLibrary (plugin)
Connect (plugin)
Disconnect (plugin)
fb_shutdow (plugin)
UnloadLibrary (plugin)
Connect (application)
????

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332270
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladfb_shutdown нужно вызывать только перед выгрузкой fbclient, а не после каждого дисконнекта.

Она и вызывается только перед выгрузкой fbclient, когда все скриптовые компоненты освобождаются за ненужностью.
В IBEScript по умолчанию это происходит после каждого выполнения скрипта.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332283
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovLoadLibrary (application)
LoadLibrary (plugin)
Connect (plugin)
Disconnect (plugin)
fb_shutdow (plugin)
UnloadLibrary (plugin)
Connect (application)Так нельзя
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332289
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

IBEScript.dll когда выгружается экспертом ? Надеюсь не в коде финализации ?
Думаю, IBEScript.dll не должен вызывать fb_shutdown. Он сам вызовется при выгрузке fbclient.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332291
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertВ порядке бреда: есть подозрение, что что-то из загружаемого самой fbclient.dll опять же ее и грузит, увеличивая счетчик ссылок. А потом не выгружает.Это не бред, это так и есть.
И fb_shutdown как раз обеспечивает принудительную выгрузку всего остального, что не даёт отпустить fbclient.dll.
Но вызывать его нужно до завершения приложения. Т.е., например, в секции финализации это делать уже поздно.
Ну и нужно помнить, что после fb_shutdown никакая работа с fbclient.dll уже не возможна (иначе какой же это shutdown).
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332293
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladIBEScript.dll когда выгружается экспертом ? Надеюсь не в коде финализации?
Думаю, IBEScript.dll не должен вызывать fb_shutdown. Он сам вызовется при выгрузке fbclient.


IBEScript не используется экспертом. Читай выше: у пользователя какое-то свое приложение на IBO, вдобавок для выполнения скриптов он из того же приложения он использует IBEScript.dll. Как уж он там загружает/выгружает, в каком порядке - мне это неведомо, да и неважно: он имеет право выгружать IBEScript.dll в любой момент.
Подозреваю, что IBO тоже дергает fb_shutdown тогда, когда считает нужным.

Почему IBEScript.dll не должен вызывать fb_shutdown? Он вовсе не обязан использовать ту же клиентскую либу, что и хост-приложение.
Может использовать любую заданную, да хоть пять разных одновременно. И кто будет fb_shutdown дергать?
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332295
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladIBExpertВ порядке бреда: есть подозрение, что что-то из загружаемого самой fbclient.dll опять же ее и грузит, увеличивая счетчик ссылок. А потом не выгружает.Это не бред, это так и есть.
И fb_shutdown как раз обеспечивает принудительную выгрузку всего остального, что не даёт отпустить fbclient.dll.
Но вызывать его нужно до завершения приложения. Т.е., например, в секции финализации это делать уже поздно.
Ну и нужно помнить, что после fb_shutdown никакая работа с fbclient.dll уже не возможна (иначе какой же это shutdown).

Ну так об этом и речь:
1. Проблема воспроизводится при коннекте/дисконнекте в эксперте (embedded), нет там никакого завершения приложения.
2. fbclient не выгружается, хотя должна.
3. Следующая попытка коннекта выдает "connection shutdown". Что совершенно естественно, раз она не выгрузилась.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332301
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТак нельзя
А как тогда? Плагин не имеет ни малейшего понятия что и как делает приложение. А невызов
fb_shutdown перед выгрузкой библиотеки карается крашем, документированным в многочисленных
топиках этого форума.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332324
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertПочему IBEScript.dll не должен вызывать fb_shutdown?fb_shutdown вызывается перед последним вызовом FreeLibrary ведущим к выгрузке fbclient.dll

fb_shutdown нужен для того, чтобы
- корректно закрыть всё то, что приложение не закрыло за собой
- избежать зависания при завершении приложения
- отпустить другие модули, которые могут держать ссылки на сам fbclient - при явной выгрузке fbclient'а.
Но тут выгружающий код должен иметь гарантию, что его вызов FreeLibrary - последний

Т.к. IBEScript.dll - не приложение, не знает о том, используется ли fbclient самим приложением или другими модулями,
то он не должен вызывать fb_shutdown.

Итого: fb_shutdown критически важен, когда
- приложение статически слинковано с fbclient.dll
- приложение явно загружает\выгружает fbclient.dll и ему нужно, чтобы fbclient.dll был реально выгружен

В остальных случаях fb_shutdown можно не вызывать.

В 3.0 механизм выгрузки fbclient.dll был доработан так, чтобы меньше зависеть от вызова fb_shutdown и
не падать\не вешаться в тех случаях, когда при завершении приложения остались не очищенные ресурсы,
а само приложение не вызвало fb_shutdown вовремя.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332325
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА невызов
fb_shutdown перед выгрузкой библиотеки карается крашем, документированным в многочисленных
топиках этого форума.Не для 3.0
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332326
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertНу так об этом и речь:
1. Проблема воспроизводится при коннекте/дисконнекте в эксперте (embedded), нет там никакого завершения приложения.
2. fbclient не выгружается, хотя должна. Сдаётся мне, реальный сценарий чуть сложнее вышеописанного
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332337
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТ.к. IBEScript.dll - не приложение, не знает о том, используется ли fbclient самим приложением или другими модулями,
то он не должен вызывать fb_shutdown.

Тогда в 2.5 имеем крэш. Ну, в общем, понятно, что с этим ничего уже не сделать, и надо просто объезжать это на кривой козе.

hvladСдаётся мне, реальный сценарий чуть сложнее вышеописанного


В каком смысле? Само собой, там не просто коннект/дисконнект, а выполнение кучки запросов между ними. Но перед коннектом вызывается LoadLibrary, а после дисконнекта - FreeLibrary.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39332810
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТ.к. IBEScript.dll - не приложение, не знает о том, используется ли fbclient самим приложением или другими модулями

Внезапно - Google!

https://social.msdn.microsoft.com/Forums/en-US/9b391db0-6429-4f63-88c3-a8b010f76da7/dll-reference-counter?forum=vcgeneral
http://chee-yang.blogspot.ru/2008/12/windows-get-reference-count-of-dll-in.html

PS. Но по хорошему, конечно, надо было к fb_shutdown сделать парный fb_init - и пусть он ничего не делает кроме увеличения счётчика, зато можно бы было просто вызывать fb_shutdown каждый раз при выгрузке, и не опасаться, что она не последняя
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39333213
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochPS. Но по хорошему, конечно, надо было к fb_shutdown сделать парный fb_init - и пусть он ничего не делает кроме увеличения счётчика, зато можно бы было просто вызывать fb_shutdown каждый раз при выгрузке, и не опасаться, что она не последняя

Толку-то, если fbclient не выгружается из памяти.

2Влад:
А не проще ли (и правильнее) при вызове каждой функции, требующей дополнительной инициализации клиента, проверять, в каком состоянии находится fbclient и выполнять или не выполнять инициализацию?
Т.е., завести некий флаг инициализированного состояния, который сбрасывается вызовом fb_shutdown. И каждый вызов функции клиента извне начинать с проверки этого флага. Если он сброшен - выполнять инициализацию и затем собственно функцию.
Тогда fb_shutdown можно будет вызывать не парясь собственным подсчетом ссылок.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39333248
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert, ИМХО, хорошее решение! И еще lazy инициализацию прикрутить при вызове функции, требующей инициализации библиотеки.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39333350
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertА не проще ли (и правильнее) при вызове каждой функции, требующей дополнительной инициализации клиента, проверять, в каком состоянии находится fbclient и выполнять или не выполнять инициализацию?Это практически не возможно - примерно как провернуть фарш в обратную сторону
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39333362
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladIBExpertНу так об этом и речь:
1. Проблема воспроизводится при коннекте/дисконнекте в эксперте (embedded), нет там никакого завершения приложения.
2. fbclient не выгружается, хотя должна. Сдаётся мне, реальный сценарий чуть сложнее вышеописанногоОбновил IBE до 2016.10.21.1
Сам IBE у меня использует FB embedded 2.5.3 для user database.

Делаю embedded коннект к БД с помощью FB 3.0.1
Дисконнект - fbclient 3.0.1 выгружен, а также engine12 и прочее. Осталось только ICU и ibutil.
Снова коннект - ок
Дисконнект - fbclient 3.0.1 выгружен, а также engine12 и прочее. Осталось только ICU и ibutil.
И т.д.
...
Рейтинг: 0 / 0
Не выгружается fbclient.dll (FB 2.5 и 3)
    #39333416
bazilio77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

У меня на одном компьютере база и embedded 3.0.1 в том же каталоге есть проблема,
копирую каталог на другой компьютер нет проблем.

Думаю зависит еще и от точных версий дополнительных dll от которых зависит fbclient.dll
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не выгружается fbclient.dll (FB 2.5 и 3)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]