X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=BAYES_00,SPF_PASS X-Spam-Check-By: sourceware.org Message-ID: <4B633439.6030609@gmail.com> Date: Fri, 29 Jan 2010 19:17:13 +0000 From: Andrew West User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091215 Shredder/3.0 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: dlclose not calling destructors of static variables. References: <4B61732F DOT 4030804 AT gmail DOT com> <4B62DDE6 DOT 5070106 AT gmail DOT com> <4B62F118 DOT 8010305 AT gmail DOT com> <20100129184514 DOT GA9550 AT ednor DOT casa DOT cgf DOT cx> In-Reply-To: <20100129184514.GA9550@ednor.casa.cgf.cx> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On 29/01/10 18:45, Christopher Faylor wrote: > On Fri, Jan 29, 2010 at 02:30:48PM +0000, Andrew West wrote: > >> On 29/01/2010 13:08, Dave Korn wrote: >> >>> On 28/01/2010 11:21, Andrew West wrote: >>> >>>> I seem to be having a problem with dlclose not calling the destructors >>>> of statically declared variables. I've attached a simple test case >>>> which I compile as follows; >>>> >>>> >>> Thanks for the report and the STC; this should work. I'll take a look >>> at it over the weekend or the start of next week if nobody else gets >>> there first. >>> >>> >> Thanks for looking into this, it looks a little more complex than I >> first thought. >> >> I've tried calling __call_exitprocs during dlclose ( after run_dtors >> for the unloading library ) just to see if I was thinking along the >> right lines. Unfortunately this didn't work as when the destructor is >> registered with atexit it isn't associated with the loaded library but >> with the main executable. >> >> Which brings me on to the bigger problem, the static variables are >> registered with atexit rather than with __cxa_atexit which seems to be >> a violation of the C++ standard (1). >> >> Worse still gcc isn't compiled with cxa_atexit enabled. So I assume >> the right course of action here is to enable __cxa_atexit in gcc, and >> then make sure __cxa_finalize gets called when the library is unloaded? >> > I agree with your assessment here. I've checked in a change which works > around the problem you've uncovered but it is not foolproof. It should > fix the immediate problem but, in the long run, I agree that gcc should > be emitting code which calls __cxa_atexit. Of course I have no idea > what the other ramifications of doing that might be. Hopefully Dave can > enlighten us. > > This is in today's snapshot at http://cygwin.com/snapshots/ . > > O.k. I'll check out the changes on Monday, but one minor point. Shouldn't the atexit stuff be run after all the destructors have run? -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple