Re: [PATCH] At-exit hook

Mikael Djurfeldt <[email protected]>
Newsgroups gmane.lisp.guile.devel
Message-ID <CAA2Xvw+1V-dYKyBLSr_kEaD+KNzyddULTfL7mjRWUFKw_w3WQA@mail.gmail.com>
OK, so people have brought up two issues:

1. It is for various reasons not recommended to call atexit() from a
dynamically linked library (which Guile already does before my suggested
change, n.b.).

2. It is not async signal safe.

A suggested remedy would then be:

Instead of calling the at-exit-hook from really_cleanup_for_exit, we could
call it (still within an scm_with_guile) from the end of scm_boot_guile(),
just before exit(), with the disadvantage that it wouldn't be called if
main_func() calls exit on its own. It's kind of a pity that we didn't early
on introduce some kind of scm_finalize_guile() which the user would have to
call when done with the library...

And, well, perhaps we should block asyncs, but I don't know about signals
with this new setup.

Best regards,
Mikael

On Thu, Nov 7, 2024 at 1:26 PM Mailer <[email protected]> wrote:

> On Thu, 7 Nov 2024 12:09:25 +0000
> Mailer <[email protected]> wrote:
> > On Thu, 7 Nov 2024 12:23:08 +0100
> > Maxime Devos <[email protected]> wrote:
> > > ‘atexit’ functions are run at ‘exit’. ‘exit’ can be run from signal
> > > handlers (*). Since the hook runs Scheme code, it could do a lot of
> > > AC-unsafe things, resulting in problems.
> > >
> > > (*) glibc documentation says ‘exit’ is AC-unsafe, but this is
> > > unsupported by POSIX AFAICT. OTOH the same applies to even ‘malloc’,
> > > so likely I’m looking in the wrong places.
> >
> > I think you meant async-signal-safe (AS-safe).  'exit' is not a-s-s and
> > cannot be called in a signal handler (for example it can flush buffers)
> > whereas '_exit' is a-s-s.  Furthermore a registered handler cannot
> > itself safely call 'exit'.
> >
> > I believe the main reason that use of 'atexit' or 'on_exit' is
> > discouraged is that it does not handle abnormal process termination.
> > (Registered handlers also don't run on termination by '_exit', but that
> > is usually what you want.)
>
> I believe also that use of 'atexit' is discouraged in dynamically linked
> libraries because of the uncertain timing of the unloading of the
> library, but I think in fact glibc is OK with this, so I guess it may
> depend on your libc.
>
> Chris
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.