Skip to content

Commit 42dcfe6

Browse files
committed
handle interrupts nicely
1 parent 8566c0c commit 42dcfe6

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

R/frollapply.R

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -332,10 +332,19 @@ frollapply = function(X, N, FUN, ..., by.column=TRUE, fill=NA, align=c("right","
332332
## collect results
333333
if (length(ansi)) {
334334
if (use.fork) {
335-
fork.res = tryCatch(
336-
parallel::mccollect(jobs),
337-
error = function(e) stopf(msg.collect, "an error", e[["message"]]),
338-
warning = function(w) warningf(msg.collect, "a warning", w[["message"]])
335+
fork.res = withCallingHandlers(
336+
tryCatch(
337+
parallel::mccollect(jobs),
338+
error = function(e) stopf(msg.collect, "an error", e[["message"]]),
339+
warning = function(w) warningf(msg.collect, "a warning", w[["message"]])
340+
),
341+
interrupt = function(e) {
342+
suspendInterrupts({
343+
lapply(jobs, function(pid) try(tools::pskill(pid), silent=TRUE))
344+
parallel::mccollect(jobs, wait=FALSE)
345+
})
346+
invokeRestart("abort") ## raise SIGINT
347+
}
339348
)
340349
## check for any errors in FUN, warnings are silently ignored
341350
fork.err = vapply_1b(fork.res, inherits, "try-error", use.names=FALSE)

0 commit comments

Comments
 (0)