Skip to content

Commit 54f8f19

Browse files
committed
fix: wait for subprocesses to finish when R_COVR is true
- Ensure `session$close(grace = 10000)` is called instead of abandoning the process when `R_COVR` is true during session pruning. - Add `session$poll_process(-1)` and `session$close(grace = 10000)` to `TaskManager$stop` to allow tests running with `covr` to gracefully exit and preserve coverage data.
1 parent 836cb46 commit 54f8f19

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

R/task.R

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,11 @@ TaskManager <- R6::R6Class("TaskManager",
148148
if (is.null(idle_start)) {
149149
attr(session, "idle_start") <- Sys.time()
150150
} else if (as.numeric(difftime(Sys.time(), idle_start, units = "secs")) > private$session_idle_timeout) {
151-
session$close()
151+
if (identical(Sys.getenv("R_COVR"), "true")) {
152+
session$close(grace = 10000)
153+
} else {
154+
session$close()
155+
}
152156
private$sessions[[i]] <- NULL
153157
}
154158
} else {
@@ -241,7 +245,13 @@ TaskManager <- R6::R6Class("TaskManager",
241245
}
242246
if (private$use_session) {
243247
for (session in private$sessions) {
244-
if (!identical(Sys.getenv("R_COVR"), "true")) {
248+
if (identical(Sys.getenv("R_COVR"), "true")) {
249+
while (session$get_state() %in% c("starting", "busy")) {
250+
session$poll_process(1000)
251+
tryCatch(session$read(), error = function(e) NULL)
252+
}
253+
session$close(grace = 10000)
254+
} else {
245255
session$close()
246256
}
247257
}

0 commit comments

Comments
 (0)