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)

Reply via email to