pthread_mutex_unlock function unexpectedly fails when called in child process on a mutex, which: * has PTHREAD_MUTEX_ERRORCHECK or PTHREAD_MUTEX_RECURSIVE attribute * has been locked in parent process Possibility of unlocking of a mutex locked in parent process is typically used in handlers installed by pthread_atfork routine and is supposed to work. Code example: #include <pthread.h> #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]) { pthread_mutex_t mutex; pthread_mutexattr_t attr; pid_t pid; int err; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); pthread_mutex_init(&mutex, &attr); pthread_mutex_lock(&mutex); pid = fork(); err = pthread_mutex_unlock(&mutex); printf("pid=%d, err=%d\n", pid, err); return 0; } --------------------------------------------------- Output: pid=0, err=1 pid=5817, err=0 err should be 0 both on child and on parent.
*** This bug has been marked as a duplicate of 2745 ***