Closed
Description
I'm having a problem using a channel to send notifications to a background thread... As I understand it, this shouldn't be possible? Receiver::recv() is not supposed to panic, is it? I'm not doing anything unsafe...
Mentioned this on reddit and burntsushi has confirmed that this looks like a bug. I will try and produce some simpler code to reproduce this but don't have time at the moment. (edit - please nag me if i don't produce an example, I have a vague idea what will do it)
I've tried this with stable (1.14) and nightly and get the same result.
A copy of the code which generates the error is available here:
https://github.com/jamespharaoh/rust-output/tree/channel_recv_panic
thread '<unnamed>' panicked at 'internal error: entered unreachable code', ../src/libstd/sync/mpsc/mod.rs:879
stack backtrace:
1: 0x55ab04830c1a - std::sys::imp::backtrace::tracing::imp::write::h917062bce4ff48c3
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:42
2: 0x55ab0483672f - std::panicking::default_hook::{{closure}}::h0bacac31b5ed1870
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:247
3: 0x55ab04834666 - std::panicking::default_hook::h5897799da33ece67
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:263
4: 0x55ab04834d17 - std::panicking::rust_panic_with_hook::h109e116a3a861224
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:451
5: 0x55ab045b4d73 - std::panicking::begin_panic::h634e2b37a96f78d4
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:413
6: 0x55ab045b9ce0 - <std::sync::mpsc::Receiver<T>>::recv::h59b94a6df5881f84
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/macros.rs:44
7: 0x55ab045e5ff3 - output::output_state::OutputState::background_thread::h8aaba65c8ed499f1
at /home/james/projects/storage/rust-output/src/output_state.rs:261
8: 0x55ab045ea743 - output::output_state::OutputState::new::{{closure}}::hf69a0505c40cdaf3
at /home/james/projects/storage/rust-output/src/output_state.rs:79
9: 0x55ab045dfeda - <std::panic::AssertUnwindSafe<F> as core::ops::FnOnce<()>>::call_once::hb24d824e514ccbad
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panic.rs:295
10: 0x55ab045b53d7 - std::panicking::try::do_call::h3a6460a838b6cf70
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:356
11: 0x55ab0483e20a - __rust_maybe_catch_panic
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libpanic_unwind/lib.rs:97
12: 0x55ab045b4eb6 - std::panicking::try::h3133aaaba181f2ff
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panicking.rs:332
13: 0x55ab045b389e - std::panic::catch_unwind::h0d4cf58b5fb1c352
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/panic.rs:351
14: 0x55ab045ea000 - std::thread::Builder::spawn::{{closure}}::h4fae90249c97a5c1
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/thread/mod.rs:287
15: 0x55ab045ce9fe - <F as alloc::boxed::FnBox<A>>::call_box::hef839d7658cc4ef9
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/liballoc/boxed.rs:595
16: 0x55ab04833d64 - std::sys::imp::thread::Thread::new::thread_start::ha102a6120fc52763
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/liballoc/boxed.rs:605
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/sys_common/thread.rs:21
at /buildslave/rust-buildbot/slave/stable-dist-rustc-linux/build/obj/../src/libstd/sys/unix/thread.rs:84
17: 0x7fc0c43506b9 - start_thread
18: 0x7fc0c3e7082c - clone
19: 0x0 - <unknown>