* sigproc.cc (getsem): Set errno when unable to create own semaphore.
Reorganize to make clearer that error should only come from initial creation of process semaphore.
This commit is contained in:
parent
10dedaaa4c
commit
4a08cbfefb
|
@ -1,3 +1,9 @@
|
|||
2002-01-07 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* sigproc.cc (getsem): Set errno when unable to create own semaphore.
|
||||
Reorganize to make clearer that error should only come from initial
|
||||
creation of process semaphore.
|
||||
|
||||
2002-01-06 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* dtable.cc (dtable::init_std_file_from_handle): Add some defensive
|
||||
|
|
|
@ -926,6 +926,7 @@ getsem (_pinfo *p, const char *str, int init, int max)
|
|||
return NULL;
|
||||
}
|
||||
int wait = 1000;
|
||||
/* Wait for new process to generate its semaphores. */
|
||||
sigproc_printf ("pid %d, ppid %d, wait %d, initializing %x", p->pid, p->ppid, wait,
|
||||
ISSTATE (p, PID_INITIALIZING));
|
||||
for (int i = 0; ISSTATE (p, PID_INITIALIZING) && i < wait; i++)
|
||||
|
@ -941,27 +942,27 @@ getsem (_pinfo *p, const char *str, int init, int max)
|
|||
h = CreateSemaphore (allow_ntsec ? sec_user_nih (sa_buf) : &sec_none_nih,
|
||||
init, max, str = shared_name (str, winpid));
|
||||
p = myself;
|
||||
if (!h)
|
||||
{
|
||||
system_printf ("can't %s %s, %E", p ? "open" : "create", str);
|
||||
__seterrno ();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
h = OpenSemaphore (SEMAPHORE_ALL_ACCESS, FALSE,
|
||||
str = shared_name (str, p->dwProcessId));
|
||||
|
||||
if (h == NULL)
|
||||
{
|
||||
if (GetLastError () == ERROR_FILE_NOT_FOUND && !proc_exists (p))
|
||||
set_errno (ESRCH);
|
||||
else
|
||||
set_errno (EPERM);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
shared_name (str, p->dwProcessId));
|
||||
|
||||
if (!h)
|
||||
{
|
||||
system_printf ("can't %s %s, %E", p ? "open" : "create", str);
|
||||
set_errno (ESRCH);
|
||||
if (GetLastError () == ERROR_FILE_NOT_FOUND && !proc_exists (p))
|
||||
set_errno (ESRCH); /* No such process */
|
||||
else
|
||||
set_errno (EPERM); /* Couldn't access the semaphore --
|
||||
different cygwin DLL maybe? */
|
||||
}
|
||||
}
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue