mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-13 04:29:09 +08:00
Cygwin: pipe: Fix a regression that raw_write() slows down
After the commit 7f3c22532577, writing to pipe extremely slows down. This is because cygwait(select_sem, 10, cw_cancel) is called even when write operation is already completed. With this patch, the cygwait() is called only if the write operation is not completed. Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256398.html Fixes: 7f3c22532577 ("Cygwin: pipe: handle signals explicitely in raw_write") Reported-by: Jim Reisert AD1C <jjreisert@alum.mit.edu> Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp> (cherry picked from commit f78009cb1ccf84cc343cf2441c76196461d87532)
This commit is contained in:
parent
68a14b66ff
commit
37ab3e0d55
@ -503,8 +503,9 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
|
||||
raise (SIGPIPE);
|
||||
goto out;
|
||||
}
|
||||
else
|
||||
cygwait (select_sem, 10, cw_cancel);
|
||||
/* Break out on completion */
|
||||
if (waitret == WAIT_OBJECT_0)
|
||||
break;
|
||||
/* If we got a timeout in the blocking case, and we already
|
||||
did a short write, we got a signal in the previous loop. */
|
||||
if (waitret == WAIT_TIMEOUT && short_write_once)
|
||||
@ -512,6 +513,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
|
||||
waitret = WAIT_SIGNALED;
|
||||
break;
|
||||
}
|
||||
cygwait (select_sem, 10, cw_cancel);
|
||||
}
|
||||
/* Loop in case of blocking write or SA_RESTART */
|
||||
while (waitret == WAIT_TIMEOUT || waitret == WAIT_SIGNALED);
|
||||
|
@ -4,3 +4,6 @@ Fixes:
|
||||
- Fix undesired behaviour of console master thread in win32-input-mode
|
||||
which is supported by Windows Termainal.
|
||||
Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256380.html
|
||||
|
||||
- Fix a regression in 3.5.4 that writing to pipe extremely slows down.
|
||||
Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256398.html
|
||||
|
Loading…
x
Reference in New Issue
Block a user