NetBSD-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Strange semaphore behavior, sem_init() fails with errno 4294967295 (-1)
Mouse a écrit :
>> 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...?
Maybe if fork() occurs just when sem_init() tries to allocate memory
for example ? It's only a supposition.
>> 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?
Reading the source.
Best regards,
JKB
Home |
Main Index |
Thread Index |
Old Index