Re: pthread_cleanup_push_defer_np.3: missing functions in glibc

Florian Weimer
2021-03-08T11:28:18Z

* Alejandro Colomar:

> Hi Florian,
>
> On 3/8/21 11:39 AM, Florian Weimer wrote:
>> * Alejandro Colomar:
>>
>>> While adding 'restrict' to the prototypes, I found that the functions
>>> defined in this page don't exist on glibc (or I couldn't find them).
>>> I tried removing _np, and still no luck, and 'git log --grep' didn't
>>> help either. Where these functions removed at some point?
>> Yes, they are part of the legacy cancellation implementation that
>> predates DWARF unwinding.
>
> Thanks for the info. I guess we should add that to the manual
> page. I've tried checking out some quite old versions of glibc and
> still didn't find the functions. If you know more details about when
> they were removed, please tell me and I'll update it.

LinuxThreads had this:

/* Install a cleanup handler as pthread_cleanup_push does, but also
saves the current cancellation type and set it to deferred cancellation. */

#define pthread_cleanup_push_defer_np(routine,arg) \
{ struct _pthread_cleanup_buffer _buffer; \
_pthread_cleanup_push_defer (&_buffer, (routine), (arg));

extern void _pthread_cleanup_push_defer __P ((struct _pthread_cleanup_buffer *__buffer,
void (*__routine) (void *),
void *__arg));

This is from sysdeps/pthread/pthread.h in
glibc-linuxthreads-2.0.1.tar.gz. It was part of an add-on, not glibc
proper. This may make it a bit difficult to identify the release where
it was definitely removed.

Thanks,
Florian