Interrupts are not synchronous in R - the signal only flags the request for 
interruption. Nothing actually happens until R_CheckUserInterrupt() is called 
at an interruptible point. In you case your code is apparently not calling 
R_CheckUserInterrupt() until later as a side-effect of the next evaluation.

Cheers,
Simon


> On Apr 30, 2019, at 3:44 PM, Gábor Csárdi <csardi.ga...@gmail.com> wrote:
> 
> Hi All,
> 
> I realize that this is not a really nice reprex, but anyone has an
> idea why a background R session would "remember" an interrupt (SIGINT)
> on Unix?
> 
> rs <- callr::r_session$new()
> rs$interrupt()     # just sends a SIGINT
> #> [1] TRUE
> 
> rs$run(function() 1+1)
> #> Error: interrupt
> 
> rs$run(function() 1+1)
> #> [1] 2
> 
> It seems that the main loop somehow stores the SIGINT it receives
> while it is waiting on stdin, and then it triggers it when some input
> comes in.... Maybe. Just speculating....
> 
> Thanks,
> Gabor
> 
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to