Skip to content

Instantly share code, notes, and snippets.

@shreevari
Last active June 5, 2019 21:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shreevari/f6f95e59004e1a9bc097211d7d9dbd8d to your computer and use it in GitHub Desktop.
Save shreevari/f6f95e59004e1a9bc097211d7d9dbd8d to your computer and use it in GitHub Desktop.
The following implementation runs into segmentation faults.
(gdb) backtrace
#0 <core::slice::Iter<T> as core::iter::traits::iterator::Iterator>::fold (init=1240900, f=<optimized out>, self=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/slice/mod.rs:3150
#1 <core::iter::adapters::flatten::FlattenCompat<I,U> as core::iter::traits::iterator::Iterator>::fold::{{closure}} (acc=1240900,
iter=...) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/flatten.rs:271
#2 core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (self=<optimized out>, args=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/ops/function.rs:269
#3 core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut (self=<optimized out>, args=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/ops/function.rs:269
#4 <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::{{closure}} (acc=1240900, elt=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/mod.rs:587
#5 core::iter::traits::iterator::Iterator::fold::{{closure}} (acc=1240900, x=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/traits/iterator.rs:1684
#6 core::iter::traits::iterator::Iterator::try_fold (self=<optimized out>, init=1240900, f=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/traits/iterator.rs:1572
#7 core::iter::traits::iterator::Iterator::fold (self=..., init=1240900, f=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/traits/iterator.rs:1684
#8 <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (self=..., init=1240900, g=<optimized out>)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/mod.rs:587
#9 <core::iter::adapters::chain::Chain<A,B> as core::iter::traits::iterator::Iterator>::fold (self=..., init=<optimized out>,
f=<optimized out>) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/chain.rs:112
#10 <core::iter::adapters::chain::Chain<A,B> as core::iter::traits::iterator::Iterator>::fold (self=..., init=<optimized out>, f=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/chain.rs:106
#11 0x00005555556009a7 in <core::iter::adapters::flatten::FlattenCompat<I,U> as core::iter::traits::iterator::Iterator>::fold (
init=1240900, self=..., fold=...) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/flatten.rs:268
#12 <core::iter::adapters::flatten::Flatten<I> as core::iter::traits::iterator::Iterator>::fold (init=1240900, self=..., fold=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/flatten.rs:159
#13 <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (self=..., init=1240900, g=<optimized out>)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/adapters/mod.rs:587
#14 0x000055555562f06a in <i32 as core::iter::traits::accum::Sum>::sum (iter=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/traits/accum.rs:47
#15 core::iter::traits::iterator::Iterator::sum (self=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/iter/traits/iterator.rs:2315
#16 rav1e::encoder::FrameState<T>::compute_activity_mask (self=0x7ffff7a78c60) at /home/shreevari/repos/gsoc/rav1e/src/encoder.rs:404
#17 0x00005555556174ca in rav1e::api::ContextInner<T>::receive_packet (self=<optimized out>)
at /home/shreevari/repos/gsoc/rav1e/src/api.rs:878
--Type <RET> for more, q to quit, c to continue without paging--c
#18 0x00005555555f6cef in rav1e::api::Context<T>::receive_packet::{{closure}} () at /home/shreevari/repos/gsoc/rav1e/src/api.rs:608
#19 rayon_core::thread_pool::ThreadPool::install::{{closure}} () at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/thread_pool/mod.rs:124
#20 rayon_core::registry::Registry::in_worker_cold::{{closure}} (injected=true) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/registry.rs:356
#21 <rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute::{{closure}} () at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/job.rs:113
#22 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panic.rs:309
#23 std::panicking::try::do_call (data=0x7ffff7a7d8e8 "0\313\377\377\377\177\000") at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panicking.rs:293
#24 0x000055555581c61a in __rust_maybe_catch_panic () at src/libpanic_unwind/lib.rs:87
#25 0x00005555555edf22 in std::panicking::try (f=...) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panicking.rs:272
#26 std::panic::catch_unwind (f=...) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panic.rs:388
#27 rayon_core::unwind::halt_unwinding (func=...) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/unwind.rs:18
#28 <rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute (this=0x7fffffffc6c0) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/job.rs:113
#29 0x0000555555706bcf in rayon_core::job::JobRef::execute (self=<optimized out>) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/job.rs:60
#30 rayon_core::registry::WorkerThread::execute (self=<optimized out>, job=...) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/registry.rs:584
#31 rayon_core::registry::WorkerThread::wait_until_cold (self=0x7ffff7a7dbc0, latch=0x55555597bf90) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/registry.rs:568
#32 0x00005555557076af in rayon_core::registry::WorkerThread::wait_until (self=<optimized out>, latch=0x55555597bf90) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/registry.rs:544
#33 rayon_core::registry::main_loop (worker=..., registry=..., index=<optimized out>, breadth_first=false) at /home/shreevari/.cargo/registry/src/github.com-1ecc6299db9ec823/rayon-core-1.4.1/src/registry.rs:666
#34 0x0000555555707f4c in std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}} () at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/thread/mod.rs:470
#35 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panic.rs:309
#36 std::panicking::try::do_call (data=<optimized out>) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panicking.rs:293
#37 0x000055555581c61a in __rust_maybe_catch_panic () at src/libpanic_unwind/lib.rs:87
#38 0x000055555570bae0 in std::panicking::try (f=...) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panicking.rs:272
#39 std::panic::catch_unwind (f=...) at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/panic.rs:388
#40 std::thread::Builder::spawn_unchecked::{{closure}} () at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/thread/mod.rs:469
#41 core::ops::function::FnOnce::call_once{{vtable-shim}} () at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/ops/function.rs:231
#42 0x000055555580d3df in call_once<(),FnBox<()>> () at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/liballoc/boxed.rs:702
#43 0x000055555581ba90 in call_once<(),alloc::boxed::Box<FnBox<()>>> () at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/liballoc/boxed.rs:702
#44 start_thread () at src/libstd/sys_common/thread.rs:14
#45 thread_start () at src/libstd/sys/unix/thread.rs:80
#46 0x00007ffff7f895a2 in start_thread () from /lib64/libpthread.so.0
#47 0x00007ffff7e9c163 in clone () from /lib64/libc.so.6
pub fn compute_activity_mask(&mut self) {
let csf: [[f32; 8]; 8] = [
[1.608443, 2.339554, 2.573509, 1.608443, 1.072295, 0.643377, 0.504610, 0.421887],
[2.144591, 2.144591, 1.838221, 1.354478, 0.989811, 0.443708, 0.428918, 0.467911],
[1.838221, 1.979622, 1.608443, 1.072295, 0.643377, 0.451493, 0.372972, 0.459555],
[1.838221, 1.513829, 1.169777, 0.887417, 0.504610, 0.295806, 0.321689, 0.415082],
[1.429727, 1.169777, 0.695543, 0.459555, 0.378457, 0.236102, 0.249855, 0.334222],
[1.072295, 0.735288, 0.467911, 0.402111, 0.317717, 0.247453, 0.227744, 0.279729],
[0.525206, 0.402111, 0.329937, 0.295806, 0.249855, 0.212687, 0.214459, 0.254803],
[0.357432, 0.279729, 0.270896, 0.262603, 0.229778, 0.257351, 0.249855, 0.259950]];
let luma_plane = &self.input.planes[0];
let PlaneConfig { width, height, .. } = luma_plane.cfg;
let activity_plane = &mut self.activity_mask;
let PlaneConfig { xdec, ydec, .. } = activity_plane.cfg;
let activity_mask: &mut [u16] = &mut *activity_plane.data;
assert!(xdec == 3 && ydec == 3);
let aligned_luma = Rect {
x: 0_isize,
y: 0_isize,
width: (width >> xdec) << xdec,
height: (height >> ydec) << ydec,
};
let luma = PlaneRegion::new(luma_plane, aligned_luma);
for x in 0 .. width >> xdec {
for y in 0 .. height >> ydec {
let block_rect = Area::Rect{
x: (x << xdec) as isize,
y: (y << ydec) as isize,
width: 8,
height: 8,
};
let block = luma.subregion(block_rect);
let mut mean: i32 = block.rows_iter().flatten().map(|&val| {let int: i32 = CastFromPrimitive::cast_from(val); int}).sum();
mean = mean >> (xdec + ydec);
let deviation: Vec<i16> = block.rows_iter().flatten().map(|&pix| {let pix_int: i16 = CastFromPrimitive::cast_from(pix); pix_int - mean as i16}).collect();
let tx_type = TxType::DCT_DCT;
let tx_size = TxSize::TX_8X8;
let mut tx_deviation = [0_i32; 64];
forward_transform(&deviation, &mut tx_deviation, tx_size.width(), tx_size, tx_type, self.bit_depth);
tx_deviation.iter_mut().zip(csf.iter().flatten()).for_each(|(d, &csf)| *d = (*d as f32 * csf).floor() as i32);
let mut cs_dev = Plane::<u16>::new(8, 8, 0, 0, 0, 0);
let mut cs_deviation = PlaneRegionMut::new(
&mut cs_dev,
Rect{x: 0, y: 0, width: 8, height: 8});
inverse_transform_add(&tx_deviation, &mut cs_deviation, tx_size, tx_type, self.bit_depth);
let act: f32 = cs_deviation.rows_iter().flatten().map(|dev| *dev as f32 * *dev as f32).sum();
activity_mask[y * width>>xdec + x] = (act / 64_f32) as u16;
}
}
}
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
warning: Loadable section ".note.gnu.property" outside of ELF segments
1388x926 @ 24/1 fps
[New Thread 0x7ffff7a7e700 (LWP 13252)]
[New Thread 0x7ffff787d700 (LWP 13253)]
Thread 2 "rav1e" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7a7e700 (LWP 13252)]
<core::slice::Iter<T> as core::iter::traits::iterator::Iterator>::fold (init=1240900, f=<optimized out>, self=...)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/slice/mod.rs:3150
3150 /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libcore/slice/mod.rs: No such file or directory.
@shreevari
Copy link
Author

src/encoder.rs: 404 corresponds to line 40 in the file attached.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment