Stephen Holsenbeck created ARROW-15964:
------------------------------------------
Summary: [R] `arrow::write_*` causes R session hard abort on Mac
OSX Monterey
Key: ARROW-15964
URL: https://issues.apache.org/jira/browse/ARROW-15964
Project: Apache Arrow
Issue Type: Bug
Environment: Mac OSX Monterey 12.2.1
Chip: Apple M1 Pro
Reporter: Stephen Holsenbeck
```
arrow::write_feather(data.frame(1:2), compression = "uncompressed")
```
<details>
<summary>Sys.info</summary>
```
sysname "Darwin"
release "21.3.0"
version "Darwin Kernel Version 21.3.0: Wed Jan 5 21:37:58 PST 2022;
root:xnu-8019.80.24~20/RELEASE_ARM64_T6000"
nodename "MacBook-Pro.local"
machine "x86_64"
login "root"
</details>
<details>
<summary>sessionInfo</summary>
```
R version 4.1.2 (2021-11-01) Platform: x86_64-apple-darwin17.0 (64-bit) Running
under: macOS Monterey 12.2.1 Matrix products: default LAPACK:
/Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages: [1] stats graphics grDevices datasets utils
methods base loaded via a namespace (and not attached): [1] fs_1.5.2
usethis_2.1.5 bit64_4.0.5 [4]
lubridate_1.8.0 devtools_2.4.3 httr_1.4.2
[7] rprojroot_2.0.2 tools_4.1.2 bslib_0.3.1
[10] utf8_1.2.2 R6_2.5.1 DT_0.21
[13] DBI_1.1.2 lazyeval_0.2.2 colorspace_2.0-3
[16] withr_2.5.0 tidyselect_1.1.2 prettyunits_1.1.1
[19] processx_3.5.2 bit_4.0.4 curl_4.3.2
[22] compiler_4.1.2 cli_3.2.0 xml2_1.3.3
[25] desc_1.4.0 plotly_4.9.4.1 sass_0.4.0
[28] scales_1.1.1 bs4Dash_2.0.3 arrow_7.0.0
[31] callr_3.7.0 stringr_1.4.0 digest_0.6.29
[34] shinydashboardPlus_2.0.3 rmarkdown_2.11 pkgconfig_2.0.3
[37] htmltools_0.5.2 sessioninfo_1.2.2 attempt_0.3.1
[40] highr_0.9 fastmap_1.1.0
htmlwidgets_1.5.4 [43] rlang_1.0.2 rstudioapi_0.13
shiny_1.7.1 [46] jquerylib_0.1.4 generics_0.1.2
jsonlite_1.8.0 [49] dplyr_1.0.8 zip_2.2.0
config_0.3.1 [52] magrittr_2.0.2 Rcpp_1.0.8
munsell_0.5.0 [55] fansi_1.0.2 clipr_0.8.0
shinycssloaders_1.0.0 [58] lifecycle_1.0.1 stringi_1.7.6
yaml_2.3.5 [61] snakecase_0.11.0 brio_1.1.3
pkgbuild_1.3.1 [64] grid_4.1.2 promises_1.2.0.1
shinydashboard_0.7.2 [67] crayon_1.5.0 knitr_1.37
ps_1.6.0 [70] pillar_1.7.0 pkgload_1.2.4
reprex_2.0.1 [73] glue_1.6.2 evaluate_0.15
golem_0.3.1 [76] data.table_1.14.2
remotes_2.4.2 renv_0.15.2 [79] vctrs_0.3.8
httpuv_1.6.5 testthat_3.1.2 [82] gtable_0.3.0
purrr_0.3.4 tidyr_1.2.0 [85] assertthat_0.2.1
cachem_1.0.6 ggplot2_3.3.5 [88] xfun_0.29
mime_0.12 xtable_1.8-4 [91] roxygen2_7.1.2
UU_0.0.0.9003 later_1.3.0 [94] googledrive_2.0.0
viridisLite_0.4.0 gargle_1.2.0 [97] dockerfiler_0.1.4
tibble_3.1.6 memoise_2.0.1 [100]
shinyWidgets_0.6.3 ellipsis_0.3.2
```
</details>
<details>
<summary>Extended STDOUT from the \{reprex} package</summary>
This reprex appears to crash R.
See standard output and standard error for more details.
#
##
###
#### Standard output and error
``` sh
x Install the styler package in order to use `style = TRUE`.
*** caught illegal operation ***
address 0x114c7b741, cause 'illegal opcode'
Traceback:
1: Table__from_dots(dots, schema, option_use_threads())
2: Table$create(x)
3: arrow::write_feather(data.frame(1:2), compression = "uncompressed")
4: eval(expr, envir, enclos)
5: eval(expr, envir, enclos)
6: eval_with_user_handlers(expr, envir, enclos, user_handlers)
7: withVisible(eval_with_user_handlers(expr, envir, enclos, user_handlers))
8: withCallingHandlers(withVisible(eval_with_user_handlers(expr, envir,
enclos, user_handlers)), warning = wHandler, error = eHandler, message =
mHandler)
9: doTryCatch(return(expr), name, parentenv, handler)
10: tryCatchOne(expr, names, parentenv, handlers[[1L]])
11: tryCatchList(expr, classes, parentenv, handlers)
12: tryCatch(expr, error = function(e) { call <- conditionCall(e) if
(!is.null(call))
{ if (identical(call[[1L]], quote(doTryCatch))) call <-
sys.call(-4L) dcall <- deparse(call, nlines = 1L) prefix <-
paste("Error in", dcall, ": ") LONG <- 75L sm <-
strsplit(conditionMessage(e), "\n")[[1L]] w <- 14L + nchar(dcall, type =
"w") + nchar(sm[1L], type = "w") if (is.na(w)) w <- 14L +
nchar(dcall, type = "b") + nchar(sm[1L], type = "b") if
(w > LONG) prefix <- paste0(prefix, "\n ") }
else prefix <- "Error : " msg <- paste0(prefix, conditionMessage(e),
"\n") .Internal(seterrmessage(msg[1L])) if (!silent &&
isTRUE(getOption("show.error.messages")))
{ cat(msg, file = outFile) .Internal(printDeferredWarnings()) }
invisible(structure(msg, class = "try-error", condition = e))})
13: try(f, silent = TRUE)
14: handle(ev <- withCallingHandlers(withVisible(eval_with_user_handlers(expr,
envir, enclos, user_handlers)), warning = wHandler, error = eHandler,
message = mHandler))
15: timing_fn(handle(ev <-
withCallingHandlers(withVisible(eval_with_user_handlers(expr, envir,
enclos, user_handlers)), warning = wHandler, error = eHandler, message =
mHandler)))
16: evaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos,
debug = debug, last = i == length(out), use_try = stop_on_error != 2L,
keep_warning = keep_warning, keep_message = keep_message, output_handler =
output_handler, include_timing = include_timing)
17: evaluate::evaluate(...)
18: evaluate(code, envir = env, new_device = FALSE, keep_warning =
!isFALSE(options$warning), keep_message = !isFALSE(options$message),
stop_on_error = if (is.numeric(options$error)) options$error else
{ if (options$error && options$include) 0L else 2L
}, output_handler = knit_handlers(options$render, options))
19: in_dir(input_dir(), evaluate(code, envir = env, new_device = FALSE,
keep_warning = !isFALSE(options$warning), keep_message =
!isFALSE(options$message), stop_on_error = if (is.numeric(options$error))
options$error else \{ if (options$error && options$include)
0L else 2L }
, output_handler = knit_handlers(options$render, options)))
20: eng_r(options)
21: block_exec(params)
22: call_block(x)
23: process_group.block(group)
24: process_group(group)
25: withCallingHandlers(if (tangle) process_tangle(group) else
process_group(group), error = function(e)
{ setwd(wd) cat(res, sep = "\n", file = output %n% "")
message("Quitting from lines ", paste(current_lines(i), collapse =
"-"), " (", knit_concord$get("infile"), ") ") }
)
26: process_file(text, output)
27: knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
28: rmarkdown::render(input, quiet = TRUE, envir = globalenv(), encoding =
"UTF-8")
29: (function (input)
{ rmarkdown::render(input, quiet = TRUE, envir = globalenv(),
encoding = "UTF-8")}
)(input = base::quote("bonny-fox_reprex.R"))
30: (function (what, args, quote = FALSE, envir = parent.frame())
{ if (!is.list(args)) stop("second argument must be a list") if
(quote) args <- lapply(args, enquote) .Internal(do.call(what, args,
envir))}
)(base::quote(function (input)
{ rmarkdown::render(input, quiet = TRUE, envir = globalenv(),
encoding = "UTF-8")}
), base::quote(list(input = "bonny-fox_reprex.R")), envir =
base::quote(<environment>), quote = base::quote(TRUE))
31: do.call(do.call,
c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),
list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv, quote =
TRUE)
32: saveRDS(do.call(do.call,
c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),
list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv, quote =
TRUE), file =
"/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d")
33: withCallingHandlers(
{ NULL saveRDS(do.call(do.call,
c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),
list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv,
quote = TRUE), file =
"/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d")
flush(stdout()) flush(stderr()) NULL invisible()}, error =
function(e) { { callr_data <-
as.environment("tools:callr")$`_{_}callr_data{_}{_}` err <-
callr_data$err assign(".Traceback", .traceback(4), envir = callr_data)
dump.frames("{_}{_}callr_dump{_}{_}") assign(".Last.dump",
.GlobalEnv$`{_}{_}callr_dump{_}{_}`, envir = callr_data)
rm("{_}{_}callr_dump{_}{_}", envir = .GlobalEnv) e$call <-
deparse(conditionCall(e), nlines = 6) e2 <-
err$new_error(conditionMessage(e), call. = conditionCall(e)) class(e2)
<- c("callr_remote_error", class(e2)) e2$error <- e calls <-
sys.calls() dcframe <- which(vapply(calls, function(x) length(x) >=
1 && identical(x[[1]], quote(do.call)), logical(1)))[1] if
(!is.na(dcframe)) e2$`_ignore` <- list(c(1, dcframe + 1L))
e2$`_pid` <- Sys.getpid() e2$`_timestamp` <- Sys.time() if
(inherits(e, "rlib_error_2_0")) e2$parent <- e$parent e2 <-
err$add_trace_back(e2, embed = FALSE) saveRDS(list("error", e2), file =
paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",
".error")) }}, interrupt = function(e) { { callr_data
<- as.environment("tools:callr")$`{_}{_}callr_data{_}{_}` err <-
callr_data$err assign(".Traceback", .traceback(4), envir = callr_data)
dump.frames("{_}{_}callr_dump{_}{_}") assign(".Last.dump",
.GlobalEnv$`{_}{_}callr_dump{_}{_}`, envir = callr_data)
rm("{_}{_}callr_dump{_}_", envir = .GlobalEnv) e$call <-
deparse(conditionCall(e), nlines = 6) e2 <-
err$new_error(conditionMessage(e), call. = conditionCall(e)) class(e2)
<- c("callr_remote_error", class(e2)) e2$error <- e calls <-
sys.calls() dcframe <- which(vapply(calls, function(x) length(x) >=
1 && identical(x[[1]], quote(do.call)), logical(1)))[1] if
(!is.na(dcframe)) e2$`_ignore` <- list(c(1, dcframe + 1L))
e2$`_pid` <- Sys.getpid() e2$`_timestamp` <- Sys.time() if
(inherits(e, "rlib_error_2_0")) e2$parent <- e$parent e2 <-
err$add_trace_back(e2, embed = FALSE) saveRDS(list("error", e2), file =
paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",
".error")) }}, callr_message = function(e) \{
try(signalCondition(e))})
34: doTryCatch(return(expr), name, parentenv, handler)
35: tryCatchOne(expr, names, parentenv, handlers[[1L]])
36: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
37: doTryCatch(return(expr), name, parentenv, handler)
38: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),
names[nh], parentenv, handlers[[nh]])
39: tryCatchList(expr, classes, parentenv, handlers)
40: tryCatch(withCallingHandlers(\{ NULL saveRDS(do.call(do.call,
c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),
list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv,
quote = TRUE), file =
"/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d")
flush(stdout()) flush(stderr()) NULL invisible()}
, error = function(e) { { callr_data <-
as.environment("tools:callr")$`_{_}callr_data{_}{_}` err <-
callr_data$err assign(".Traceback", .traceback(4), envir = callr_data)
dump.frames("{_}{_}callr_dump{_}{_}") assign(".Last.dump",
.GlobalEnv$`{_}{_}callr_dump{_}{_}`, envir = callr_data)
rm("{_}{_}callr_dump{_}{_}", envir = .GlobalEnv) e$call <-
deparse(conditionCall(e), nlines = 6) e2 <-
err$new_error(conditionMessage(e), call. = conditionCall(e)) class(e2)
<- c("callr_remote_error", class(e2)) e2$error <- e calls <-
sys.calls() dcframe <- which(vapply(calls, function(x) length(x) >=
1 && identical(x[[1]], quote(do.call)), logical(1)))[1] if
(!is.na(dcframe)) e2$`_ignore` <- list(c(1, dcframe + 1L))
e2$`_pid` <- Sys.getpid() e2$`_timestamp` <- Sys.time() if
(inherits(e, "rlib_error_2_0")) e2$parent <- e$parent e2 <-
err$add_trace_back(e2, embed = FALSE) saveRDS(list("error", e2), file =
paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",
".error")) }}, interrupt = function(e) { { callr_data
<- as.environment("tools:callr")$`{_}{_}callr_data{_}{_}` err <-
callr_data$err assign(".Traceback", .traceback(4), envir = callr_data)
dump.frames("{_}{_}callr_dump{_}{_}") assign(".Last.dump",
.GlobalEnv$`{_}{_}callr_dump{_}{_}`, envir = callr_data)
rm("{_}{_}callr_dump{_}_", envir = .GlobalEnv) e$call <-
deparse(conditionCall(e), nlines = 6) e2 <-
err$new_error(conditionMessage(e), call. = conditionCall(e)) class(e2)
<- c("callr_remote_error", class(e2)) e2$error <- e calls <-
sys.calls() dcframe <- which(vapply(calls, function(x) length(x) >=
1 && identical(x[[1]], quote(do.call)), logical(1)))[1] if
(!is.na(dcframe)) e2$`_ignore` <- list(c(1, dcframe + 1L))
e2$`_pid` <- Sys.getpid() e2$`_timestamp` <- Sys.time() if
(inherits(e, "rlib_error_2_0")) e2$parent <- e$parent e2 <-
err$add_trace_back(e2, embed = FALSE) saveRDS(list("error", e2), file =
paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",
".error")) }}, callr_message = function(e)
{ try(signalCondition(e))}
), error = function(e)
{ NULL try(stop(e))}
, interrupt = function(e)
{ NULL e}
)
An irrecoverable exception occurred. R is aborting now ...
```
</details>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)