[Mesa-dev] [PATCH] ralloc: Use __attribute__((destructor)) instead of atexit(3)

Erik Faye-Lund kusmabite at gmail.com
Thu Sep 10 16:35:39 PDT 2015


On Mon, Sep 7, 2015 at 3:54 PM, Jose Fonseca <jfonseca at vmware.com> wrote:
> On 07/09/15 10:17, Jean-Sébastien Pédron wrote:
>>
>> On 04.09.2015 01:37, Matt Turner wrote:
>>>
>>> You need to test for this support in configure.ac. It's as simple as
>>> adding a call to AX_GCC_FUNC_ATTRIBUTE in the existing alphabetized
>>> list and then a little bit of preprocessor in src/util/macros.h.
>>
>>
>> Should the code fallbacks on atexit(3) if the attribute is not
>> supported?
>
>
> At least on Windows, with MSVC,  atexit should be the right thing to do,
> since we statically link MSVC RunTime,
>
>
>> Can I use the HAVE_FUNC_ATTRIBUTE_DESTRUCTOR macro in
>>
>> ralloc.c for this purpose?
>
>
>
>
>
> For the record, another alternative (way more portable), is you have a
> simple .cpp file with a static destructior:
>
>
>   class AtExit
>   {
>   public:
>      ~AtExit() {
>          // do what must be done
>       }
>   };
>
>   AtExit atExit();
>
>
> After all, it seems wrong to use non-standard C to replicate what standard
> C++ can do.

That sounds nice and all, until you stumble over problems like
STB_GNU_UNIQUE, which makes renders C++ static destructors completely
unusable on Linux if you have even a single static variable in a
method in your C++ code.

Read up on it on  Read
http://gcc.gnu.org/ml/gcc-help/2011-05/msg00450.html if you feel like
being depressed.

Unfortunately, C++ and it's many questionable implementations make up
an unpredictable beast that keeps on throwing curve-balls that makes
it no fun at all for library development.


More information about the mesa-dev mailing list