[Rd] BUG?: On Linux setTimeLimit() fails to propagate timeout error when it occurs (works on Windows)

peter dalgaard pdalgd at gmail.com
Wed Oct 26 22:34:21 CEST 2016


Spencer also had tools and rsconnect loaded (via a namespace) but it doesn't seem to make a difference for me if I load them. It also doesn't seem to matter for me whether it is CRAN R, locally built R, Terminal, R.app. However, RStudio differs 

> setTimeLimit(elapsed=1)
Error: reached elapsed time limit
> setTimeLimit(elapsed=1)
Error: reached elapsed time limit
> setTimeLimit(elapsed=1); system.time({Sys.sleep(10);message("done")})
Error in Sys.sleep(10) : reached elapsed time limit
Timing stopped at: 0.003 0.003 0.733 

-pd


> On 26 Oct 2016, at 21:54 , Henrik Bengtsson <henrik.bengtsson at gmail.com> wrote:
> 
> Thank you for the feedback and confirmations.  Interesting to see that
> it's also reproducible on macOS expect for Spencer; that might
> indicate a difference in builds.
> 
> BTW, my original post suggested that timeout error was for sure
> detected while running Sys.sleep(10).  However, it could of course
> also be that it is only detected after it finishes.
> 
> 
> For troubleshooting, the help("setTimeLimit", package = "base") says that:
> 
> * "Time limits are checked whenever a user interrupt could occur. This
> will happen frequently in R code and during Sys.sleep, but only at
> points in compiled C and Fortran code identified by the code author."
> 
> The example here uses Sys.sleep(), which supports and detects user interrupts.
> 
> 
> The timeout error message is thrown by the R_ProcessEvents(void)
> function as defined in:
> 
> * src/unix/sys-unix.c
> (https://github.com/wch/r-source/blob/trunk/src/unix/sys-unix.c#L421-L453)
> * src/gnuwin32/system.c
> (https://github.com/wch/r-source/blob/trunk/src/gnuwin32/system.c#L110-L140)
> 
> So, they're clearly different implementations on Windows and Unix.
> Also, for the Unix implementation, the code differ based on
> preprocessing directive HAVE_AQUA, which could explain why Spencer
> observes a different behavior than Peter and Berend (all on macOS).
> 
> 
> Whenever the R_CheckUserInterrupt() function is called it in turn
> always calls R_ProcessEvents().  At the end, there is a code snippet -
> if (R_interrupts_pending) onintr(); - which is Windows specific and
> could be another important difference between Windows and Unix.  This
> function is defined in:
> 
> * src/main/errors.c
> (https://github.com/wch/r-source/blob/trunk/src/main/errors.c#L114-L134)
> 
> 
> The do_setTimeLimit() function controls global variables cpuLimitValue
> and elapsedLimitValue, which are checked in R_ProcessEvents(), but
> other than setting the timeout limits I don't think it's involved in
> the runtime checks. The do_setTimeLimit() is defined in:
> 
> * src/main/sysutils.c
> (https://github.com/wch/r-source/blob/trunk/src/main/sysutils.c#L1692-L1736)
> 
> 
> Unfortunately, right now, I've got little extra time to troubleshoot
> this further.
> 
> /Henrik
> 
> On Wed, Oct 26, 2016 at 2:22 AM, Berend Hasselman <bhh at xs4all.nl> wrote:
>> 
>>> On 26 Oct 2016, at 04:44, Henrik Bengtsson <henrik.bengtsson at gmail.com> wrote:
>>> .......
>>> This looks like a bug to me.  Can anyone on macOS confirm whether this
>>> is also a problem there or not?
>>> 
>> 
>> 
>> Tried it on macOS El Capitan and got this (running in R.app with R version 3.3.2 RC (2016-10-23 r71574):
>> 
>>> setTimeLimit(elapsed=1)
>>> system.time({ Sys.sleep(10); message("done") })
>> Error in Sys.sleep(10) : reached elapsed time limit
>> Timing stopped at: 0.113 0.042 10.038
>> 
>> Berend
>> 
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-devel mailing list