Cygwin: pipe: Fix handling of EPIPE and SIGPIPE in raw_write().
This commit is contained in:
parent
e4e4537979
commit
a217fa98fd
|
@ -407,6 +407,13 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
|
||||||
if (!len)
|
if (!len)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (reader_closed ())
|
||||||
|
{
|
||||||
|
set_errno (EPIPE);
|
||||||
|
raise (SIGPIPE);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (len <= pipe_buf_size)
|
if (len <= pipe_buf_size)
|
||||||
chunk = len;
|
chunk = len;
|
||||||
else if (is_nonblocking ())
|
else if (is_nonblocking ())
|
||||||
|
@ -475,7 +482,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
|
||||||
CancelIo (get_handle ());
|
CancelIo (get_handle ());
|
||||||
set_errno (EPIPE);
|
set_errno (EPIPE);
|
||||||
raise (SIGPIPE);
|
raise (SIGPIPE);
|
||||||
break;
|
goto out;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cygwait (select_sem, 10);
|
cygwait (select_sem, 10);
|
||||||
|
@ -527,6 +534,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
|
||||||
if (nbytes_now == 0)
|
if (nbytes_now == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
out:
|
||||||
if (evt)
|
if (evt)
|
||||||
CloseHandle (evt);
|
CloseHandle (evt);
|
||||||
if (status == STATUS_THREAD_SIGNALED && nbytes == 0)
|
if (status == STATUS_THREAD_SIGNALED && nbytes == 0)
|
||||||
|
|
Loading…
Reference in New Issue