www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2010/02/01/11:26:28

X-Recipient: archive-cygwin AT delorie DOT com
X-Spam-Check-By: sourceware.org
Date: Mon, 1 Feb 2010 11:26:04 -0500
From: Christopher Faylor <cgf-use-the-mailinglist-please AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: dlclose not calling destructors of static variables.
Message-ID: <20100201162603.GB25374@ednor.casa.cgf.cx>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
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> <4B66BF2F DOT 4060802 AT gmail DOT com>
MIME-Version: 1.0
In-Reply-To: <4B66BF2F.4060802@gmail.com>
User-Agent: Mutt/1.5.20 (2009-06-14)
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
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 Mon, Feb 01, 2010 at 11:46:55AM +0000, Andrew West wrote:
>On 29/01/2010 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/ .
>>
>> cgf
>>
>>    
>
>Hi,
>
>I checked out the changes and it still crashed for me. Digging into it 
>the destructor for testlib fell outside of dll_end ( m.AllocationBase + 
>m.RegionSize ). On a whim I change m.AllocationBase to m.BaseAddress and 
>that seemed to fix it for me! The destructor ran on dlclose and the 
>testrunner.exe didn't segfault.

Could you clarify?  Are you saying that your test case still failed?

cgf

--
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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019