From f53d60a9efa5ff224bd0adcc9ac39685fd79b1a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Thu, 9 Oct 2025 20:45:33 +0200 Subject: [PATCH] Fix potential error when worker process crashes Reading the output might fail, so we need to `tryCatch()` it. Closes #2262. --- R/parallel-taskq.R | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/R/parallel-taskq.R b/R/parallel-taskq.R index 22300ce8b..2f0d0e776 100644 --- a/R/parallel-taskq.R +++ b/R/parallel-taskq.R @@ -88,8 +88,14 @@ task_q <- R6::R6Class( pr[[i]][["error"]] == "ready" outmsg <- NULL if (has_output) { - lns <- c(worker$read_output_lines(), worker$read_error_lines()) - inc <- paste0(worker$read_output(), worker$read_error()) + lns <- c( + safely(worker$read_output_lines(), character()), + safely(worker$read_error_lines(), character()) + ) + inc <- paste0( + safely(worker$read_output(), ""), + safely(worker$read_error(), "") + ) if (nchar(inc)) { lns <- c(lns, strsplit(inc, "\n", fixed = TRUE)[[1]]) } @@ -249,4 +255,11 @@ df_add_row <- function(df, ..., .before = NULL) { } } +safely <- function(expr, default = NULL) { + tryCatch( + expr, + error = function(e) default + ) +} + silence_r_cmd_check <- function() callr::r_session