On Mon, 20 May 2024, Jeremy Drake wrote: > Today, I was attempting to look at the TerminateThread situation. The > call in question comes from the attempt to terminate the wait_thread of a > chld_procs entry. I noticed elsewhere in cygwin code (flock.cc) that > CancelSynchronousIo was being called, and that stood out to me because > chances are that the wait thread (if running) is going to be blocked in > ReadFile. I am testing with the following hack, and so far have not seen > a hang
I left my reproducer running with this hack, and I did eventually get an error exit from the intermediate subprocess, which seems to have been a signal 11 (if I'm reading the status from waitpid correctly). What I noticed today is that in pinfo.cc, near the end of proc_waiter, it sets vchild.wait_thread = NULL;. If my reading of this is correct, that does nothing useful, because vchild is a stack variable there and the function returns soon after. I that what that *intended* to do was to NULL out the wait_thread pointer that would be checked in proc_terminate, but there's no guarantee that the entry in chld_procs is in the same place at the end of proc_waiter as it was at the start (so arg may point to some other pinfo entirely). Does any of this make any sense, or am I barking up the wrong tree here?