> In each thread, my software does a fork() followed by an execve(). > If I remove this fork(), I'm unable to reproduce this bug.
I have a fuzzy memory that fork() may do something to semaphores...? > int > sem_init(sem_t *sem, int pshared, unsigned int value) > { > intptr_t semid; > int error; > > if (_ksem_init(value, &semid) == -1) > return (-1); > > if ((error = sem_alloc(value, semid, sem)) != 0) { > _ksem_destroy(semid); > errno = error; > return (-1); > } > > return (0); > } > As errno contains an error, I suppose that sem_alloc() returns this > error, but sem_alloc() can only return ENOSPC or EINVAL... If _ksem_init is, as the name seems to imply, a kernel call, could it maybe be setting errno? What is your basis for saying that sem_alloc can generate only ENOSPC and EINVAL? Reading the source, or looking at documentation, or what? In particular, if it's documentation, don't trust it too much; I've seen documentation lie far too often. Also, don't forget that successful calls normally don't touch errno, though I _think_ that doesn't matter here.... /~\ The ASCII Mouse \ / Ribbon Campaign X Against HTML mo...@rodents-montreal.org / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B