digitalmars.D.bugs - [Issue 9900] New: static this and gc shutdown order issue
- d-bugmail puremagic.com (51/51) Apr 07 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9900
- d-bugmail puremagic.com (12/12) Apr 07 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9900
- d-bugmail puremagic.com (10/13) Apr 08 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9900
- d-bugmail puremagic.com (8/8) Apr 08 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9900
- d-bugmail puremagic.com (12/13) Apr 08 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9900
http://d.puremagic.com/issues/show_bug.cgi?id=9900 Summary: static this and gc shutdown order issue Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: druntime AssignedTo: nobody puremagic.com ReportedBy: flamaros.xavier gmail.com 15:17:16 PDT --- It seems gc is called after the main function to release all allocation, but only after all static this method were called. I get a crash when my application is shutting down because Derelict library use static this methods to unload dynamic libraries, but I have to use some functions of those dynamic libraries to release their objects. I call libraries shutting down functions in classes destructors which are called after the dynamic libraries were unloaded. Pseudo code : // main.d main() { DerelictLua.load(); // Load lua library and affect all lua functions ptr LuaContext script = new LuaContext(); return script.execute(); } static ~this() { DerelictLua.unload(); // Unload the liblua.so or dll, first } // luaContext.d class LuaContext { this() { mLuaContext = lua_newstate(); } ~this() { lua_close(mLuaContext); // Release the main lua library object, second (lua_close is now a bad pointer) } Lua_State* mLuaContext; } I am expecting because the "script" variable isn't use out from the "main" function scope having no issue of this kind. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 07 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9900 Martin Nowak <code dawg.eu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |code dawg.eu You must not use any shared library after unloading. The simplest approach right now is to nullify any class from the shared library and call GC.collect so that they get collected and finalized. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 07 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9900 02:50:32 PDT ---You must not use any shared library after unloading. The simplest approach right now is to nullify any class from the shared library and call GC.collect so that they get collected and finalized.To fix it I add "delete script" before the "main" exit, but I thought druntime call gc.collect just after my main return. Maybe I need to do like in java with hiding (or destroy(object)) objects I will not use anymore? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 08 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9900 Yeah destroy finalizes your object and resets it's data to the init state. You'd have to check for a null mLuaContext in your destructor for this to work because the GC will finalize your object again. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 08 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9900 Martin Nowak <code dawg.eu> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |WONTFIXIt seems gc is called after the main function to release all allocation, butonly after all static this method were called. Because the module destructors may reference and use GC allocated memory. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 08 2013