Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: atexit(), dlclose() and more atexit()



On Sun, Jun 28, 2020 at 11:48:15PM +0200, Kamil Rytarowski wrote:
> On 28.06.2020 23:29, Joerg Sonnenberger wrote:
> > It is fundamentally wrong to use a handler in a library that can be
> > unloaded. Some systems hack around that problem by looping over all
> > atexit handlers on dlclose, but that's exactly that, a costly hack. The
> > most common way this triggers is a segfault, actually.
> 
> The world disagrees and NetBSD is different for no good reason.

You sound like a broken record. Have you *thought* about the reasons at
all? Like for example the very definition of atexit: "Run a handler at
process exit". The Linux variant does not do that. Heck, they only
document it as a side note.

> We shall add support for this.

We shall not. It is a bad design.

> On 28.06.2020 23:29, Joerg Sonnenberger wrote:
> > The code should be using either a C dtor with the appropiate attribute
> > or __cxa_atexit directly, but the former is preferable.
> 
> This replacement forces to use a hack with a GCC extension (destructor
> attribute) instead of C complaint code.

So what? It can be spelled out differently and the library here
certainly contains enough dependencies on GCC extensions already.

> __cxa_atexit is a C++ thing so another hack for our atexit(3).

Where the heck did you arrive at the conclusion that __cxa_atexit is a
C++ thing? It is support infrastructure having dynamic cleanup handlers
on a per DSO base. Just because C++ was the first language to desire
that doesn't mean it is C++ only. In fact, the above extension is using
exactly the same code.

Joerg


Home | Main Index | Thread Index | Old Index