[omniORB] Crash when closing with OmniOrb 4 and everything in
different DLL's (Win32)
Barthel Marco
Marco.Barthel at comergo.com
Thu Sep 21 09:50:07 BST 2006
You may want to have a look at
http://omniorb.sourceforge.net/omni40/omniORB/omniORB012.html
-marco
> I have a dll load order (or actually unload order) problem
> with omniorb on Win32 when using DLL's.
> In my setup, both my code and omniorb are in two separate
> DLL's, the exe is yet another part.
> The Corba part works so far as I see without major problems,
> but when unloading my dll it crashes.
> My problem is that my dll is registering for one of its
> objects _nil object to be deleted when omniorb unloads, and
> this happens after my dll unloads, so not existing code get called.
> Here's a more detailed explanation of what is going on:
>
> a.exe: the main application, unaware of ominorb, loads b.dll
> dynamically
> b.dll: the dll using omniorb. Links to b.dll
> omniorb.dll: dll version of omniorb.
>
> - a.exe is loaded.
> - LoadLibrary("b.dll") from a.exe
> - LoadLibrary("omniorb.dll") (automatically from Windows)
> - omniorb dll is loaded
> - b.dll is loading.
> - obj= b::SomeObject::_nil is created
> - b::SomeObject::_nil object is registered to omniorb to be deleted:
> omni::registerNilCorbaObject(obj)
> - a.exe decides to unload b.dll later on. UnloadLibrary("b.dll")
> - b.dll gets unloaded. Code for b::SomeObject gets unmapped,
> but b::SomeObject::_nil is not deleted yet :-(
> - omniorb dll is unloaded, destructor of no longer loaded
> b::SomeObject is called
> -> crash
>
> I'm currently using OmniOrb 4.0.4, so there are a more recent
> versions out, but I did not see any bug fix which would apply.
> Also, does my observations make sense? Is something in my
> setup not correct or supported, or how is it supposed to work?
More information about the omniORB-list
mailing list