This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: Use of atexit for destructors on Solaris 7.
- To: gcc-bugs at gcc dot gnu dot org
- Subject: Re: Use of atexit for destructors on Solaris 7.
- From: Charles Galambos <c dot galambos at eim dot surrey dot ac dot uk>
- Date: Thu, 23 Mar 2000 16:02:29 +0000
- cc: "Martin v. Loewis" <martin at loewis dot home dot cs dot tu-berlin dot de>
Hi,
> > Since 'atexit' on solaris is function ptr it can be replaced.
>
> Why do you think it is a function pointer? It is a proper function. It
> still can be replaced.
My mistake, its not a ptr. Just an overly quick glace at the systems headers
and wishfull thinking on my part.
> > Is there a way I can replace the atexit function before or at least
> > early in the initilisation of static variables ?
>
> You can provide a different version to linker. Depending on how
> exactly you arrange that, it will be used instead of the one in the C
> library. Of course, you'll also have to replace exit if you want the
> registered functions to be called...
Replacing 'atexit' and '_exithandle' functions seems to work nicely. In
one (medium-sized) program I tried, 'atexit' was called 149 times. Only 3 or
4
of these were calls made directly by the user. It does put the previous
limit in perspective.
> > wasn't silently ignored, especailly as most implementations seem to
> > have a limit of the the number of times it can be called.
>
> Why would that be good? If you have code like
If the compiler is going to do something unexpected, I'd like
to know. I could well be relying on a destructor to close a network
connection cleanly or something similar. If its not going to get called,
I'd like to know.
> MyClassC &AVar() { static MyClassC x; return x; }
>
> it typically matters in which order these variables are initialized -
> in many cases, it does not really matter in which order/whether they
> are destroyed. In your case, what would happen if some of these global
> objects are not destroyed?
Wouldn't bother me at all in this case. Which is why I was unaware
of the problem for so long. The problem only bit me when I started
using gtk, and the initalisation failed on a called to 'atexit'. All
the atexit calls were used before 'main' was even started. It
had me completely puzzled or a while... until I fired up gtk and
did a break on atexit.
I have a workable fix for now. I get the impression there is some work
being done on the 'atexit' mechanism to support dynamic libraries, I
assume this limit will be removed when this is introduced ???
Thanks,
Charles.