Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Intermittent panic: "already borrowed: BorrowMutError" during jpeg decoding with rayon #17100

Open
mbrubeck opened this issue May 30, 2017 · 2 comments

Comments

@mbrubeck
Copy link
Contributor

@mbrubeck mbrubeck commented May 30, 2017

I saw this panic just once, while testing parallel layout on the myspace page in the Talos TP5N data set, in a release build with a smaller parallel chunk size (i.e., increased parallelism). It might be a race condition that's made more likely by higher thread count or higher system load.

Full stack trace:

already borrowed: BorrowMutError (thread <unnamed>, at /checkout/src/libcore/result.rs:859)
stack backtrace:
   0:     0x563a75da605c - backtrace::backtrace::trace::h7bc3cec00fabb61e
   1:     0x563a75da61a2 - backtrace::capture::Backtrace::new::h23089c033eded8f0
   2:     0x563a74375385 - servo::main::{{closure}}::heceaa3859e884fa2
   3:     0x563a762cc2ea - std::panicking::rust_panic_with_hook
                        at /checkout/src/libstd/panicking.rs:550
   4:     0x563a762cc134 - std::panicking::begin_panic<collections::string::String>
                        at /checkout/src/libstd/panicking.rs:511
   5:     0x563a762cc0b9 - std::panicking::begin_panic_fmt
                        at /checkout/src/libstd/panicking.rs:495
   6:     0x563a762cc047 - std::panicking::rust_begin_panic
                        at /checkout/src/libstd/panicking.rs:471
   7:     0x563a762f7fed - core::panicking::panic_fmt
                        at /checkout/src/libcore/panicking.rs:69
   8:     0x563a745d1d20 - core::result::unwrap_failed::h7141d40b7cc1ee6e
   9:     0x563a745b69f4 - std::panicking::try::do_call::h5416008dadd5fdbd
  10:     0x563a762d337a - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:98
  11:     0x563a745fadfe - <rayon_core::job::HeapJob<BODY> as rayon_core::job::Job>::execute::h851b6e7c240beb6d
  12:     0x563a760dd919 - rayon_core::registry::WorkerThread::execute::h4b9ef25fa96525f0
  13:     0x563a760cafe6 - rayon_core::registry::in_worker::h73ce52b651decb7a
  14:     0x563a760d11f0 - rayon::iter::internal::bridge_producer_consumer::helper::h40b3f80910935f6f
  15:     0x563a760cce8c - std::panicking::try::do_call::hf75bfc1be0e15186
  16:     0x563a762d337a - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:98
  17:     0x563a760d1fca - <rayon_core::job::StackJob<L, F, R> as rayon_core::job::Job>::execute::hadc1bfb4ad27a6de
  18:     0x563a760dd919 - rayon_core::registry::WorkerThread::execute::h4b9ef25fa96525f0
  19:     0x563a760cafe6 - rayon_core::registry::in_worker::h73ce52b651decb7a
  20:     0x563a760d11f0 - rayon::iter::internal::bridge_producer_consumer::helper::h40b3f80910935f6f
  21:     0x563a760d2973 - jpeg_decoder::decoder::compute_image::hf15eccc942bad0ae
  22:     0x563a7606ae18 - <jpeg_decoder::decoder::Decoder<R>>::decode_internal::h2f619a9b0dbe4447
  23:     0x563a760a530e - image::dynimage::load::h61df26191ec73a70
  24:     0x563a760bbb6f - image::dynimage::load_from_memory::hed1079ca9b4fdf78
  25:     0x563a7602f1d8 - net_traits::image::base::load_from_memory::h7e1af03cf48972d0
  26:     0x563a7596cbd9 - <net::image_cache::ImageCacheImpl as net_traits::image_cache::ImageCache>::find_image_or_metadata::h615e00cf4a5007b3
  27:     0x563a75824d4a - layout::context::LayoutContext::get_or_request_image_or_meta::hddf273a5d3b6f61f
  28:     0x563a745f2b9c - layout::fragment::ImageFragmentInfo::new::hbc7da74e6ea76ee6
  29:     0x563a74602d8c - <layout::construct::FlowConstructor<'a, ConcreteThreadSafeLayoutNode>>::build_fragment_for_block::hbe42c749b153ad50
  30:     0x563a746028c4 - <layout::construct::FlowConstructor<'a, ConcreteThreadSafeLayoutNode>>::build_flow_for_block::hce893fd678a891f1
  31:     0x563a745a4551 - <layout::construct::FlowConstructor<'a, ConcreteThreadSafeLayoutNode> as layout::traversal::PostorderNodeMutTraversal<ConcreteThreadSafeLayoutNode>>::process::hc03559d2e66ac9ef
  32:     0x563a745e19d2 - style::traversal::DomTraversal::handle_postorder_traversal::h34f5ea701361d594
  33:     0x563a745b688c - std::panicking::try::do_call::h5416008dadd5fdbd
  34:     0x563a762d337a - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:98
  35:     0x563a745fadfe - <rayon_core::job::HeapJob<BODY> as rayon_core::job::Job>::execute::h851b6e7c240beb6d
  36:     0x563a760dd811 - rayon_core::registry::WorkerThread::wait_until::hb8bb0271392b3c70
  37:     0x563a760d9b03 - std::sys_common::backtrace::__rust_begin_short_backtrace::hc42ae88fee5e8b73
  38:     0x563a760da14b - std::panicking::try::do_call::h0ae761b9e3a0cc1e
  39:     0x563a762d337a - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:98
  40:     0x563a760daa87 - <F as alloc::boxed::FnBox<A>>::call_box::h91b4e629ac890bb2
  41:     0x563a762cae85 - alloc::boxed::{{impl}}::call_once<(),()>
                        at /checkout/src/liballoc/boxed.rs:658
                         - std::sys_common::thread::start_thread
                        at /checkout/src/libstd/sys_common/thread.rs:21
                         - std::sys::imp::thread::{{impl}}::new::thread_start
                        at /checkout/src/libstd/sys/unix/thread.rs:84
  42:     0x7f070c2cc493 - start_thread
  43:     0x7f070bdf893e - __clone
  44:                0x0 - <unknown>
@mbrubeck mbrubeck changed the title Intermittent panic: "already borrowed: BorrowMutError" during image decoding Intermittent panic: "already borrowed: BorrowMutError" during jpeg decoding with rayon May 30, 2017
@mbrubeck
Copy link
Contributor Author

@mbrubeck mbrubeck commented May 30, 2017

The build I was testing did not include #17025, so it's possible this has the same root cause as might have the same cause as #16982.

@mateon1
Copy link
Contributor

@mateon1 mateon1 commented Sep 10, 2017

Stumbled upon this while trying to reproduce #18438 (on baskino.co)

already borrowed: BorrowMutError (thread <unnamed>, at /checkout/src/libcore/result.rs:906)
stack backtrace:
   0:     0x55dea30a20dc - backtrace::backtrace::trace::h0f1eee7f17c620ad
   1:     0x55dea30a2112 - backtrace::capture::Backtrace::new::h1abdde591da67f3d
   2:     0x55dea1e01865 - servo::main::{{closure}}::h2775028620a930e9
   3:     0x55dea45b6b26 - std::panicking::rust_panic_with_hook
                        at /checkout/src/libstd/panicking.rs:612
   4:     0x55dea45b6944 - std::panicking::begin_panic<alloc::string::String>
                        at /checkout/src/libstd/panicking.rs:572
   5:     0x55dea45b68b9 - std::panicking::begin_panic_fmt
                        at /checkout/src/libstd/panicking.rs:522
   6:     0x55dea45b684a - std::panicking::rust_begin_panic
                        at /checkout/src/libstd/panicking.rs:498
   7:     0x55dea45f0e30 - core::panicking::panic_fmt
                        at /checkout/src/libcore/panicking.rs:71
   8:     0x55dea2049440 - core::result::unwrap_failed::h189ab83eecd37320
   9:     0x55dea201ce52 - std::panicking::try::do_call::h990cd4a4ebd18d7b
  10:     0x55dea45bdbcc - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:99
  11:     0x55dea207bc55 - <rayon_core::job::HeapJob<BODY> as rayon_core::job::Job>::execute::h58f1f6888686e4f3
  12:     0x55dea436dfb9 - rayon_core::registry::WorkerThread::execute::h47e0a1eb413247d4
  13:     0x55dea435a3d4 - rayon_core::registry::in_worker::h1d823e1eaf309140
  14:     0x55dea4360981 - rayon::iter::internal::bridge_producer_consumer::helper::h0063b7e398d18f39
  15:     0x55dea4361eef - jpeg_decoder::decoder::compute_image::h3e89c4290ec8970a
  16:     0x55dea42f7f65 - <jpeg_decoder::decoder::Decoder<R>>::decode_internal::h380cbed05ef22a7c
  17:     0x55dea43421d4 - image::dynimage::load::habd474967672983d
  18:     0x55dea434c5ff - image::dynimage::load_from_memory::h75cb70335be4211b
  19:     0x55dea42d83ee - net_traits::image::base::load_from_memory::had48ec70d262c64c
  20:     0x55dea228acb3 - <net::image_cache::ImageCacheImpl as net_traits::image_cache::ImageCache>::find_image_or_metadata::hac327d274896afbf
  21:     0x55dea2118cfa - layout::context::LayoutContext::get_or_request_image_or_meta::hd4579bc09bd18139
  22:     0x55dea2071b6c - layout::fragment::ImageFragmentInfo::new::ha4255c1f346251ce
  23:     0x55dea208dae1 - <layout::construct::FlowConstructor<'a, ConcreteThreadSafeLayoutNode>>::build_fragment_for_block::h55ac4afde2679695
  24:     0x55dea200222c - <layout::construct::FlowConstructor<'a, ConcreteThreadSafeLayoutNode> as layout::traversal::PostorderNodeMutTraversal<ConcreteThreadSafeLayoutNode>>::process::he084db8e919368b1
  25:     0x55dea205ac23 - style::traversal::DomTraversal::handle_postorder_traversal::h9480adf36bfaf936
  26:     0x55dea2059bd6 - style::parallel::traverse_nodes::h3517e63f994a1bb7
  27:     0x55dea201cab7 - std::panicking::try::do_call::h990cd4a4ebd18d7b
  28:     0x55dea45bdbcc - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:99
  29:     0x55dea207bc55 - <rayon_core::job::HeapJob<BODY> as rayon_core::job::Job>::execute::h58f1f6888686e4f3
  30:     0x55dea436dd74 - rayon_core::registry::WorkerThread::wait_until::h1e427f463111f332
  31:     0x55dea43692e2 - std::sys_common::backtrace::__rust_begin_short_backtrace::h694e208e4b2971b1
  32:     0x55dea43699fb - std::panicking::try::do_call::haee83498f519912b
  33:     0x55dea45bdbcc - panic_unwind::__rust_maybe_catch_panic
                        at /checkout/src/libpanic_unwind/lib.rs:99
  34:     0x55dea436af56 - <F as alloc::boxed::FnBox<A>>::call_box::hd770c4f01669af04
  35:     0x55dea45b57ab - alloc::boxed::{{impl}}::call_once<(),()>
                        at /checkout/src/liballoc/boxed.rs:692
                         - std::sys_common::thread::start_thread
                        at /checkout/src/libstd/sys_common/thread.rs:21
                         - std::sys::imp::thread::{{impl}}::new::thread_start
                        at /checkout/src/libstd/sys/unix/thread.rs:84
  36:     0x7fc38303c493 - start_thread
  37:     0x7fc382b69abe - __clone
  38:                0x0 - <unknown>
ERROR:servo: already borrowed: BorrowMutError

EDIT: This also happened on ddmix.net (reproduced once in five runs), ticketmonster.co.kr and euronews.com (neither reproduced).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.