`rstudioapi.rs` test is accessing R off the main thread
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 337
- Forks
- 32
- Avg merge
- 8d 17h
- Merged PRs (30d)
- 11
Description
The problem is the unguarded harp::envvar::set_var("POSITRON_VERSION", value) which talks to R.
This is awkward because there is an R_MAIN but this is an integration test (unlike data_explorer.rs which is an integration test but without an R_MAIN).
So in theory we do want to use an r_task(), but right now IS_TESTING is true so it would just say "oh i guess i can run this right here", but really it can't. It needs to send it to the main R thread, which is probably not the thread the test is running on.
Maybe we can also look at RMain::is_initialized(), but I feel like this still isn't perfect:
R_MAINcould be setting up, but not fully initialized yet- We send an r-task right away
- It sees
IS_TESTING && (RMain::is_initialized() = false)because it hasn't fully set up yet, so in that case it would still run the r-task on the current thread. Frustrating!
From https://github.com/posit-dev/ark/actions/runs/11502602809/job/32017966783:
running 2 tests
thread 'test_get_version' panicked at library/core/src/panicking.rs:221:5:
thread 'test_get_version' panicked at crates/ark/src/interface.rs:561:13:
panic in a function that cannot unwind
stack backtrace:
Must access `R_MAIN` on the main R thread, not thread 'test_get_version'.
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
0: 0x55b32c02aef5 - std::backtrace_rs::backtrace::libunwind::trace::h649ab3318d3445c5
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
1: 0x55b32c02aef5 - std::backtrace_rs::backtrace::trace_unsynchronized::hf4bb60c3387150c3
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x55b32c02aef5 - std::sys::backtrace::_print_fmt::hd9186c800e44bd00
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:65:5
3: 0x55b32c02aef5 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h1b9dad2a88e955ff
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:40:26
4: 0x55b32c057c4b - core::fmt::rt::Argument::fmt::h351a7824f737a6a0
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/fmt/rt.rs:173:76
5: 0x55b32c057c4b - core::fmt::write::h4b5a1270214bc4a7
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/fmt/mod.rs:1182:21
6: 0x55b32c02773f - std::io::Write::write_fmt::hd04af345a50c312d
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/io/mod.rs:1827:15
7: 0x55b32c02c711 - std::sys::backtrace::BacktraceLock::print::h68d41b51481bce5c
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:43:9
8: 0x55b32c02c711 - std::panicking::default_hook::{{closure}}::h96ab15e9936be7ed
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:269:22
9: 0x55b32c02c3ec - std::panicking::default_hook::h3cacb9c27561ad33
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:296:9
10: 0x55b32a7421aa - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hd212b1446b2b2077
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/alloc/src/boxed.rs:2084:9
11: 0x55b32a7421aa - test::test_main::{{closure}}::hd15ff34f3f68988b
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/test/src/lib.rs:136:21
12: 0x55b32c02cfaf - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hce7569f4ca5d1b64
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/alloc/src/boxed.rs:2084:9
13: 0x55b32c02cfaf - std::panicking::rust_panic_with_hook::hfe205f6954b2c97b
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:808:13
14: 0x55b32c02cba3 - std::panicking::begin_panic_handler::{{closure}}::h6cb44b3a50f28c44
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:667:13
15: 0x55b32c02b3b9 - std::sys::backtrace::__rust_end_short_backtrace::hf1c1f2a92799bb0e
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:168:18
16: 0x55b32c02c864 - rust_begin_unwind
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:[665](https://github.com/posit-dev/ark/actions/runs/11502602809/job/32017966783#step:11:666):5
17: 0x55b32a70a855 - core::panicking::panic_nounwind_fmt::runtime::h907a0444fa61a6dc
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panicking.rs:112:18
18: 0x55b32a70a855 - core::panicking::panic_nounwind_fmt::h4c4dc67d0bbc166c
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panicking.rs:122:5
19: 0x55b32a70a8e2 - core::panicking::panic_nounwind::hb98133c151c787e4
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panicking.rs:221:5
20: 0x55b32a70aaa6 - core::panicking::panic_cannot_unwind::he9511e6e72319a3e
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panicking.rs:309:5
21: 0x55b32af8a411 - r_write_console
at /home/runner/work/ark/ark/crates/ark/src/interface.rs:1929:1
22: 0x7fb25a7d5902 - REvprintf_internal
at /tmp/R-4.4.1/src/main/printutils.c:1052:6
23: 0x7fb25a7d59fd - REprintf
at /tmp/R-4.4.1/src/main/printutils.c:898:5
24: 0x7fb25a75b08f - Rf_check_stack_balance
at /tmp/R-4.4.1/src/main/eval.c:932:5
25: 0x7fb25a75b08f - Rf_eval
at /tmp/R-4.4.1/src/main/eval.c:1279:6
26: 0x7fb25a75ae50 - Rf_eval
at /tmp/R-4.4.1/src/main/eval.c:1226:6
27: 0x55b32bc6b988 - libr::r::Rf_eval::h0116a2590c159505
at /home/runner/work/ark/ark/crates/libr/src/functions.rs:31:21
28: 0x55b32b963364 - harp::exec::try_eval::{{closure}}::hc839c8fbf2caeaa0
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:96:41
29: 0x55b32b96455a - harp::exec::try_catch::callback::h8102df397fc5874e
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:200:31
30: 0x7fb25a72debe - R_withCallingErrorHandler
at /tmp/R-4.4.1/src/main/errors.c:2579:16
31: 0x55b32bc6b636 - libr::r::R_withCallingErrorHandler::h44cd83875b2432e9
at /home/runner/work/ark/ark/crates/libr/src/functions.rs:31:21
32: 0x55b32b96b01e - harp::exec::try_catch::{{closure}}::h926031ea6998fb45
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:272:9
33: 0x55b32b96f32a - harp::exec::top_level_exec::callback::hdf5d07c39df924ce
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:342:31
34: 0x7fb25a6ea8ba - R_ToplevelExec
at /tmp/R-4.4.1/src/main/context.c:804:2
35: 0x55b32bc6b5d8 - libr::r::R_ToplevelExec::h733084817154de54
at /home/runner/work/ark/ark/crates/libr/src/functions.rs:31:21
36: 0x55b32b96c187 - harp::exec::top_level_exec::h3036d6b85f1a5d17
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:345:14
37: 0x55b32b963a60 - harp::exec::try_catch::h5f1898a2d90fc101
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:271:20
38: 0x55b32b963113 - harp::exec::try_eval::hd6a1f8582f62f13a
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:96:19
39: 0x55b32b96308b - harp::exec::RFunction::call_in::h2fc69e39cccd56e4
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:88:9
40: 0x55b32b96301e - harp::exec::RFunction::call::hb3cafa1579aadaff
at /home/runner/work/ark/ark/crates/harp/src/exec.rs:83:9
41: 0x55b32b98b196 - harp::envvar::set_var::hdc63bde33f778f68
at /home/runner/work/ark/ark/crates/harp/src/envvar.rs:37:5
42: 0x55b32a70c3f8 - rstudioapi::test_get_version::h415ff5cfdf9920e9
at /home/runner/work/ark/ark/crates/ark/tests/rstudioapi.rs:14:5
43: 0x55b32a70c337 - rstudioapi::test_get_version::{{closure}}::hfc49e73553401981
at /home/runner/work/ark/ark/crates/ark/tests/rstudioapi.rs:5:22
44: 0x55b32a70b746 - core::ops::function::FnOnce::call_once::h21bb8dad1d799aad
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/ops/function.rs:250:5
45: 0x55b32a7467eb - core::ops::function::FnOnce::call_once::h81f56a195fe4862e
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/ops/function.rs:250:5
46: 0x55b32a7467eb - test::__rust_begin_short_backtrace::h919c79c8b896f9e2
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/test/src/lib.rs:624:18
47: 0x55b32a746095 - test::run_test_in_process::{{closure}}::h7b3d5751c5b4dd75
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/test/src/lib.rs:647:60
48: 0x55b32a746095 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hdabd61465e4dbd80
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panic/unwind_safe.rs:272:9
49: 0x55b32a746095 - std::panicking::try::do_call::hc813c79fd64b0a90
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:557:40
50: 0x55b32a746095 - std::panicking::try::h055c5de7e7bfc209
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:521:19
51: 0x55b32a746095 - std::panic::catch_unwind::h4265d6525195c807
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panic.rs:350:14
52: 0x55b32a746095 - test::run_test_in_process::he72c277a35f96567
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/test/src/lib.rs:647:27
53: 0x55b32a746095 - test::run_test::{{closure}}::h974e632522c0fbcf
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/test/src/lib.rs:568:43
54: 0x55b32a70e084 - test::run_test::{{closure}}::hdc2c89ce8b601dda
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/test/src/lib.rs:598:41
55: 0x55b32a70e084 - std::sys::backtrace::__rust_begin_short_backtrace::h342cb8e53aeb2076
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/backtrace.rs:152:18
56: 0x55b32a7117b2 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h67b1b5c1709ad95b
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/thread/mod.rs:538:17
57: 0x55b32a7117b2 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hd8c7a030ea8b7[676](https://github.com/posit-dev/ark/actions/runs/11502602809/job/32017966783#step:11:677)
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/panic/unwind_safe.rs:272:9
58: 0x55b32a7117b2 - std::panicking::try::do_call::h512c2ab2c15b7d31
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:557:40
59: 0x55b32a7117b2 - std::panicking::try::h5c2903f8937bc868
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panicking.rs:521:19
60: 0x55b32a7117b2 - std::panic::catch_unwind::h242c80217c2dbece
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/panic.rs:350:14
61: 0x55b32a7117b2 - std::thread::Builder::spawn_unchecked_::{{closure}}::h6cb4494ebdd8caf7
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/thread/mod.rs:537:30
62: 0x55b32a7117b2 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h42193b008049ba94
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/core/src/ops/function.rs:250:5
63: 0x55b32c0320eb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::ha1963004222e7822
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/alloc/src/boxed.rs:2070:9
64: 0x55b32c0320eb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h1086ced1f7c494c2
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/alloc/src/boxed.rs:2070:9
65: 0x55b32c0320eb - std::sys::pal::unix::thread::Thread::new::thread_start::ha8af9c992ef0b208
at /rustc/eeb90cda1969383f56a2637cbd3037bdf598841c/library/std/src/sys/pal/unix/thread.rs:108:17
66: 0x7fb285094ac3 - <unknown>
67: 0x7fb28512[685](https://github.com/posit-dev/ark/actions/runs/11502602809/job/32017966783#step:11:686)0 - <unknown>
68: 0x0 - <unknown>
thread caused non-unwinding panic. aborting.
error: test failed, to rerun pass `-p ark --test rstudioapi`
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with crates/ark/tests/rstudioapi.rs, especially test_get_version and its POSITRON_VERSION setup. Read crates/harp/src/envvar.rs and the existing R_MAIN and r_task handling, comparing the data_explorer.rs integration test. Done means the test no longer accesses R from test_get_version's worker thread and passes without the reported panic.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- r, rust
- Domain
- testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100