* sigproc.cc (sigproc_init): Set aside more buffer space for signal pipes.
(sig_send): Retry WriteFiles which fail when there is no error but packbytes have not been sent.
This commit is contained in:
parent
0db2f28fd6
commit
6f05b32767
|
@ -1,3 +1,10 @@
|
||||||
|
2014-07-15 Christopher Faylor <me.cygwin2014@cgf.cx>
|
||||||
|
|
||||||
|
* sigproc.cc (sigproc_init): Set aside more buffer space for signal
|
||||||
|
pipes.
|
||||||
|
(sig_send): Retry WriteFiles which fail when there is no error but
|
||||||
|
packbytes have not been sent.
|
||||||
|
|
||||||
2014-07-15 Christopher Faylor <me.cygwin2014@cgf.cx>
|
2014-07-15 Christopher Faylor <me.cygwin2014@cgf.cx>
|
||||||
|
|
||||||
* sigproc.cc (send_sig): Don't report an error if WriteFile succeeds.
|
* sigproc.cc (send_sig): Don't report an error if WriteFile succeeds.
|
||||||
|
|
|
@ -426,7 +426,7 @@ sigproc_init ()
|
||||||
char char_sa_buf[1024];
|
char char_sa_buf[1024];
|
||||||
PSECURITY_ATTRIBUTES sa = sec_user_nih ((PSECURITY_ATTRIBUTES) char_sa_buf, cygheap->user.sid());
|
PSECURITY_ATTRIBUTES sa = sec_user_nih ((PSECURITY_ATTRIBUTES) char_sa_buf, cygheap->user.sid());
|
||||||
DWORD err = fhandler_pipe::create (sa, &my_readsig, &my_sendsig,
|
DWORD err = fhandler_pipe::create (sa, &my_readsig, &my_sendsig,
|
||||||
sizeof (sigpacket), "sigwait",
|
NSIG * sizeof (sigpacket), "sigwait",
|
||||||
PIPE_ADD_PID);
|
PIPE_ADD_PID);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
|
@ -635,7 +635,19 @@ sig_send (_pinfo *p, siginfo_t& si, _cygtls *tls)
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD nb;
|
DWORD nb;
|
||||||
if (!WriteFile (sendsig, leader, packsize, &nb, NULL))
|
BOOL res;
|
||||||
|
/* Try multiple times to send if packsize != nb since that probably
|
||||||
|
means that the pipe buffer is full. */
|
||||||
|
for (int i = 0; i < 100; i++)
|
||||||
|
{
|
||||||
|
res = WriteFile (sendsig, leader, packsize, &nb, NULL);
|
||||||
|
if (!res || packsize == nb)
|
||||||
|
break;
|
||||||
|
Sleep (10);
|
||||||
|
res = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!res)
|
||||||
{
|
{
|
||||||
/* Couldn't send to the pipe. This probably means that the
|
/* Couldn't send to the pipe. This probably means that the
|
||||||
process is exiting. */
|
process is exiting. */
|
||||||
|
|
Loading…
Reference in New Issue