Fixed with be7ce04 , tests needed

Turns out this was slightly more involved than just setting up a CATCH block, 
as the CATCH block will only be seen either in the executing thread, or in the 
.tap block of the signal handler.

So in the end, I decided to always start the code in a separate thread with 
“start”, and let another Promise be reset by ^C, and then wait for either 
promise to be kept.

> On 11 Aug 2016, at 20:35, Zoffix Znet (via RT) <perl6-bugs-follo...@perl.org> 
> wrote:
> 
> # New Ticket Created by  Zoffix Znet 
> # Please include the string:  [perl #128900]
> # in the subject line of all future correspondence about this issue. 
> # <URL: https://rt.perl.org/Ticket/Display.html?id=128900 >
> 
> 
> If you start the REPL and then run:
> 
>     sleep 50000
> 
> Or any other long running command, it'll "hang" for a long time. If you 
> attempt to press Control+C to abort that line, you end up exiting REPL.
> 
> When ^C is pressed while a line in REPL is running, it should abort that 
> line, instead of exiting. And the current behaviour is to be maintained in 
> that pressing ^C when nothing is running exitings the REPL.
> 
> Relevant IRC conversation: 
> http://irclog.perlgeek.de/perl6/2016-08-11#i_13007834
> 
> Specifically:
> [lizmat]: fwiw, I think it should be pretty trivial to catch SIGINT in a 
> signal handler, then die("SIGINTED") in there, and then let the CATCH handler 
> cleanup

Reply via email to