Source: libc0.3-dev Version: 2.24-8 Severity: important According to the documentation (man page) for pthread_mutex_trylock:
The pthread_mutex_trylock() function shall be equivalent to
pthread_mutex_lock(), except that if the mutex object referenced by
mutex is currently locked (by any thread, including the current
thread), the call shall return immediately.
RETURN VALUE
The pthread_mutex_trylock() function shall fail if:
EBUSY The mutex could not be acquired because it was already locked.
Here is a short test program
#include <pthread.h>
#include <stdio.h>
#include <errno.h>
int main() {
pthread_mutex_t m;
int i;
printf("%s: %i\n", "EBUSY", EBUSY);
printf("%s: %i\n", "EAGAIN", EAGAIN);
i = pthread_mutex_init(&m, NULL);
printf("%s: %i\n", "init", i);
i = pthread_mutex_lock(&m);
printf("%s: %i\n", "lock", i);
i = pthread_mutex_trylock(&m);
printf("%s: %i\n", "trylock", i);
i = pthread_mutex_unlock(&m);
printf("%s: %i\n", "unlock", i);
i = pthread_mutex_destroy(&m);
printf("%s: %i\n", "destroy", i);
}
On Linux this behaves according to the documentation:
EBUSY: 16
EAGAIN: 11
init: 0
lock: 0
trylock: 16
unlock: 0
destroy: 0
I.e. the trylock on the already locked mutex returns EBUSY.
On Hurd the following happens:
EBUSY: 1073741840
EAGAIN: 1073741859
init: 0
lock: 0
trylock: -1
unlock: 0
destroy: 0
I.e. the trylock on the already locked mutex returns -1 instead.
This causes programs using GLib to abort execution:
GLib (gthread-posix.c): Unexpected error from C library during
'pthread_mutex_trylock': Error in unknown error system: FFFFFFFF.
Aborting.
Aborted
Mattias
signature.asc
Description: This is a digitally signed message part

