Skip to content

Commit 395fda6

Browse files
jeremyd2019dscho
authored andcommitted
Cygwin: revert use of CancelSyncronousIo on wait_thread.
It appears this is causing hangs on native x86_64 in similar scenarios as the hangs on ARM64, because `CancelSynchronousIo` is returning `TRUE` but not canceling the `ReadFile` call as expected. Cherry-picked from msys2/msys2-runtime's 2eb6be14ee (Cygwin: revert use of CancelSyncronousIo on wait_thread., 2024-11-21). Addresses: msys2/MSYS2-packages#4340 (comment) Fixes: b091b47 ("cygthread: suspend thread before terminating.") Signed-off-by: Jeremy Drake <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent d937dbd commit 395fda6

File tree

2 files changed

+4
-6
lines changed

2 files changed

+4
-6
lines changed

winsup/cygwin/pinfo.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,14 +1262,13 @@ proc_waiter (void *arg)
12621262

12631263
for (;;)
12641264
{
1265-
DWORD nb, err;
1265+
DWORD nb;
12661266
char buf = '\0';
12671267

12681268
if (!ReadFile (vchild.rd_proc_pipe, &buf, 1, &nb, NULL)
1269-
&& (err = GetLastError ()) != ERROR_BROKEN_PIPE)
1269+
&& GetLastError () != ERROR_BROKEN_PIPE)
12701270
{
1271-
if (err != ERROR_OPERATION_ABORTED)
1272-
system_printf ("error on read of child wait pipe %p, %E", vchild.rd_proc_pipe);
1271+
system_printf ("error on read of child wait pipe %p, %E", vchild.rd_proc_pipe);
12731272
break;
12741273
}
12751274

winsup/cygwin/sigproc.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,8 +410,7 @@ proc_terminate ()
410410
if (!have_execed || !have_execed_cygwin)
411411
chld_procs[i]->ppid = 1;
412412
if (chld_procs[i].wait_thread)
413-
if (!CancelSynchronousIo (chld_procs[i].wait_thread->thread_handle ()))
414-
chld_procs[i].wait_thread->terminate_thread ();
413+
chld_procs[i].wait_thread->terminate_thread ();
415414
/* Release memory associated with this process unless it is 'myself'.
416415
'myself' is only in the chld_procs table when we've execed. We
417416
reach here when the next process has finished initializing but we

0 commit comments

Comments
 (0)