14.07.2021 13:22, Dimitry Sibiryakov wrote:
14.07.2021 12:13, Vlad Khorsun wrote:
Why do you think it does ? Do you have a stack trace ?
Yes. Functions after global destructors are called from fb_shutdown().
Does your embedded app calls fb_shutdown() before exit() ?
My "embedded app" is isql so - yes, it calls fb_shutdown() from atexit().
Good. In this case the scenario is:
- app call fb_shutdown()
- fb_shutdown() call doClean() of every loaded plugin module and unload dll
module
- windows loader call DllMain of unloading module (actually it is not DllMain
but
some other entrypoint of run-time)
- run-time entrypoint call dtors of global objects in dll module
What problem from FB side do you see here ?
Does your dll module conains code that detects "unxpected" unload (as UnloadDetectorHelper do) ?
No because my doClean() does nothing useful and I saw no point in cleanup.
This is wrong, see above.
Does your dll module run cleanup code in this case ?
Which exactly "cleanup code" do you have on mind?
See above.
Calling of unregisterModule() could prevent call of doClean(), but not TraceFactory::getOwner()/release() which happen from
PluginManager::releasePlugin().
Show stack trace, pls
Regards,
Vlad
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel