discard any exception thrown while trying to kill worker threads
Since there's a race here, and since Kyle saw an exception leak out, which I have not been able to reproduce that. See my comment for what I think might be going on. Note that, I used tryNonAsync, because it seems a later tryNonAsync caught the exception. I don't actually understand how it did, as I understand exception classification, it's the data type, not the way it was thrown. One possibility is that the async exception may have been wrapped in some other, non-async exception, and Show displayed it the same way.
This commit is contained in:
parent
020e588262
commit
c59a51a065
2 changed files with 17 additions and 1 deletions
|
@ -328,7 +328,7 @@ outputFilter cmd params environ outfilter errfilter =
|
|||
-- maximum for them to finish and then cancel them.
|
||||
-- (One program that has behaved this way in the past is
|
||||
-- openssh.)
|
||||
race_
|
||||
void $ tryNonAsync $ race_
|
||||
(wait outt >> wait errt)
|
||||
(threadDelaySeconds (Seconds 2) >> cancel outt >> cancel errt)
|
||||
return ret
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 15"""
|
||||
date="2020-08-10T20:06:28Z"
|
||||
content="""
|
||||
Hmm, come to think of it, `wait errt` is racing
|
||||
`cancel errt`, so what if cancel kills the errt thread,
|
||||
and before `race` noticed cancel is done, the wait thread
|
||||
sees errt, died of an an AsyncCancelled exception and rethrows that?
|
||||
Result could be the exception leaking out, perhaps.
|
||||
|
||||
It might be that async now avoids that, and some other version didn't, or
|
||||
you could be getting unlucky with the race.
|
||||
|
||||
So, I've added something to catch that exception in case it leaks.
|
||||
"""]]
|
Loading…
Add table
Reference in a new issue