-
Notifications
You must be signed in to change notification settings - Fork 30
Description
This bug was originally found in #53 . The reason was: stdlib uses a PANIC_COUNT
in TLS to ensure no panic while panicking in runtime. But obviously, Coroutines in coio can be migrated between threads, which means that it turns out to cause data race (because compiler still think that we are running in the same thread, so we may access to the other thread's TLS without any synchronization method).
We wanted to solve this PANIC_COUNT
partially in rust-lang/rust#33408, but because stdlib relies heavily on TLS (such as println!
), it will also causes SIGSEGV randomly:
println!("Before");
Scheduler::sched(); // Switch out
// Well, now, this Coroutine may already been stolen by the other thread
// And then resumed by the other thread
println!("After");
Rust's compiler don't know that we have switched to another thread, so it may inline those TLS calls.
We are looking for a solution for this bug, discussing in here, if you have any idea, please help.