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

Reply via email to