Uploaded image for project: 'Apache Arrow'
  1. Apache Arrow
  2. ARROW-16201

[R] SafeCallIntoR on 3.4

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Blocker
    • Resolution: Fixed
    • None
    • 8.0.0
    • R

    Description

      In the R versions test, we're seeing a segfault on 3.4:

      Start test: SafeCallIntoR errors from the non-R thread
      
       *** caught segfault ***
      address 0x2b, cause 'memory not mapped'
      
      Traceback:
       1: .Call(`_arrow_TestSafeCallIntoR`, r_fun_that_returns_a_string,     opt)
       2: TestSafeCallIntoR(function() "string one!", opt = "async_without_executor")
       3: eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
       4: withCallingHandlers(expr, condition = function(cnd) {    if (!is.null(matched) || !matches(cnd)) {        return()    }    if (can_entrace(cnd)) {        cnd <- cnd_entrace(cnd)    }    matched <<- cnd    if (inherits(cnd, "message") || inherits(cnd, "warning")) {        cnd_muffle(cnd)    }    else if (inherits(cnd, "error") || inherits(cnd, "skip")) {        return_from(tl, cnd)    }})
       5: .capture(act$val <- eval_bare(quo_get_expr(.quo), quo_get_env(.quo)),     ...)
       6: quasi_capture(enquo(object), label, capture_matching_condition,     matches = matcher)
       7: expect_condition_matching("error", {    {        object    }}, regexp = regexp, class = class, ..., inherit = inherit, info = info,     label = label)
       8: expect_error(TestSafeCallIntoR(function() "string one!", opt = "async_without_executor"),     "Call to R from a non-R thread")
       9: eval(code, test_env)
      10: eval(code, test_env)
      11: withCallingHandlers({    eval(code, test_env)    if (!handled && !is.null(test)) {        skip_empty()    }}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,     message = handle_message, error = handle_error)
      12: doTryCatch(return(expr), name, parentenv, handler)
      13: tryCatchOne(expr, names, parentenv, handlers[[1L]])
      14: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
      15: doTryCatch(return(expr), name, parentenv, handler)
      16: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),     names[nh], parentenv, handlers[[nh]])
      17: tryCatchList(expr, classes, parentenv, handlers)
      18: tryCatch(withCallingHandlers({    eval(code, test_env)    if (!handled && !is.null(test)) {        skip_empty()    }}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,     message = handle_message, error = handle_error), error = handle_fatal,     skip = function(e) {    })
      19: test_code(desc, code, env = parent.frame(), reporter = reporter)
      20: testthat::test_that(what, {    skip_if(getOption("..skip.tests", TRUE), "arrow C++ library not available")    code})
      21: test_that("SafeCallIntoR errors from the non-R thread", {    skip_on_cran()    expect_error(TestSafeCallIntoR(function() "string one!",         opt = "async_without_executor"), "Call to R from a non-R thread")    expect_error(TestSafeCallIntoR(function() stop("an error!"),         opt = "async_without_executor"), "Call to R from a non-R thread")})
      22: eval(code, test_env)
      23: eval(code, test_env)
      24: withCallingHandlers({    eval(code, test_env)    if (!handled && !is.null(test)) {        skip_empty()    }}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,     message = handle_message, error = handle_error)
      25: doTryCatch(return(expr), name, parentenv, handler)
      26: tryCatchOne(expr, names, parentenv, handlers[[1L]])
      27: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
      28: doTryCatch(return(expr), name, parentenv, handler)
      29: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),     names[nh], parentenv, handlers[[nh]])
      30: tryCatchList(expr, classes, parentenv, handlers)
      31: tryCatch(withCallingHandlers({    eval(code, test_env)    if (!handled && !is.null(test)) {        skip_empty()    }}, expectation = handle_expectation, skip = handle_skip, warning = handle_warning,     message = handle_message, error = handle_error), error = handle_fatal,     skip = function(e) {    })
      32: test_code(NULL, exprs, env)
      33: source_file(path, child_env(env), wrap = wrap)
      34: FUN(X[[i]], ...)
      35: lapply(test_paths, test_one_file, env = env, wrap = wrap)
      36: doTryCatch(return(expr), name, parentenv, handler)
      37: tryCatchOne(expr, names, parentenv, handlers[[1L]])
      38: tryCatchList(expr, classes, parentenv, handlers)
      39: tryCatch(code, testthat_abort_reporter = function(cnd) {    cat(conditionMessage(cnd), "\n")    NULL})
      40: with_reporter(reporters$multi, lapply(test_paths, test_one_file,     env = env, wrap = wrap))
      41: test_files(test_dir = test_dir, test_package = test_package,     test_paths = test_paths, load_helpers = load_helpers, reporter = reporter,     env = env, stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,     wrap = wrap, load_package = load_package)
      42: test_files(test_dir = path, test_paths = test_paths, test_package = package,     reporter = reporter, load_helpers = load_helpers, env = env,     stop_on_failure = stop_on_failure, stop_on_warning = stop_on_warning,     wrap = wrap, load_package = load_package, parallel = parallel)
      43: test_dir("testthat", package = package, reporter = reporter,     ..., load_package = "installed")
      44: test_check("arrow", reporter = arrow_reporter)
      An irrecoverable exception occurred. R is aborting now ...
      Segmentation fault (core dumped)
      

      https://github.com/ursacomputing/crossbow/runs/6017815299?check_suite_focus=true

      Attachments

        Issue Links

          Activity

            People

              jonkeane Jonathan Keane
              jonkeane Jonathan Keane
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 2h 10m
                  2h 10m