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