I was able to finally reproduce the problem. Seems like it is the select_region call is holding locks that are needed by the renderengine. I did try a simple fix but it did not work on the first try. It is late here, and I can now reproduce a bug (hopefully the only issue, there are other similar handlers in this callback). I will give this problem priority tomorrow, and let you know how it goes. This is the traceback for the gdb that I was trying to describe earlier. Thanks for you help and perseverance. It would be very good to fix this bug, a real hazard. gg (gdb) p dump() signal_entry: lock table size=29 0x65af7b0 VIconThread::draw_lock, VIconThread::run 0 0x7fff37fff700 0x6f1a6e0 CWindowTool::input_lock, CWindowTool::run 0x7fff10ff9700 0x7033cf0 BC_DialogThread::active_lock, BC_DialogThread::run 0x7ffee37fe700 * 0x7e08ad0 RecordSetChannel::change_channel, (null) 0x7ffde27fc700 0x7de2480 RecordCutAdsStatus::wait_lock, RecordCutAdsStatus::run 0x7ffde1ffb700 0x7f07cd0 ChannelInfo::scan_lock, (null) 0x7ffde17fa700 0x7f09530 SWindow::swin_lock, (null) 0x7ffde0ff9700 0x490e8a0 BC_Synchronous::next_command, BC_Synchronous::run 0x7fffc97fa700 0x490bbb0 MWindow::run_lock, MWindow::run 0x7ffff6d49840 * 0x7ffedc6b64e0 PlaybackEngine::output_lock, PlaybackEngine::run 0x7ffea4ff9700 0x85e6dc0 MainIndexes::input_lock, MainIndexes::run 1 0x7ffd997fa700 0x707b360 ResourceThread::draw_lock, ResourceThread::run 0x7ffe4f7fe700 0x7fffa8005fa0 BC_Xfer::Slicer::init, Slicer::run 0x7ffd7dfe3700 0x7fffa8005e10 BC_Xfer::Slicer::init, Slicer::run 0x7fffb2388700 0x687e848 Cinelerra: Compositor, BC_WindowBase::dispatch_event 1 0x7fff8ffff700 * 0x687e848 Cinelerra: Compositor, TimeBar::select_region 0x7fff8ffff700 * 0x687e848 Cinelerra: Compositor, VDeviceX11::open_output 0x7ffee3fff700 0x6ed27f0 Canvas::canvas_lock, Canvas::refresh 0x7fff8ffff700 0x7ffee3fff700 0x687e848 Cinelerra: Compositor, BC_Repeater::run 0x7fffb0ff9700 0x85e7da0 BC_WindowBase::event_condition, BC_WindowBase::get_event 0x7fffcaffd700 0x7f0d480 BC_WindowBase::event_condition, BC_WindowBase::get_event 0x7fffe0e98700 0x5f78d20 BC_WindowBase::event_condition, BC_WindowBase::get_event 0x7fff8f7fe700 0x7ffedc0028c0 BC_WindowBase::event_condition, BC_WindowBase::get_event 0x7ffee37fe700 0x7035980 BC_WindowBase::event_condition, BC_WindowBase::get_event 0x7ffff6d49840 0x7705950 BC_WindowBase::event_condition, BC_WindowBase::get_event 0x7ffde3fff700 lock_items: 25 lock_frees: 4 $1 = void (gdb) thr find 0x7fff8ffff700 Thread 192 has target id 'Thread 0x7fff8ffff700 (LWP 2979)' (gdb) thr 192 [Switching to thread 192 (Thread 0x7fff8ffff700 (LWP 2979))] #0 0x00007ffff7cb4d45 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 (gdb) bt #0 0x00007ffff7cb4d45 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #1 0x0000000000d95f3a in Condition::lock (this=0x6ed27f0, location=0x2b19f64 "Canvas::refresh") at condition.C:64 #2 0x0000000000a2bbe6 in Canvas::lock_canvas (this=0x6ed64c0, loc=0x2b19f64 "Canvas::refresh") at canvas.C:92 #3 0x0000000000a2d560 in Canvas::refresh (this=0x6ed64c0, flush=0) at canvas.C:475 #4 0x0000000000a2d512 in Canvas::reposition_window (this=0x6ed64c0, edl=0x5f93d50, x=23, y=0, w=937, h=561) at canvas.C:465 #5 0x0000000000a2d3df in Canvas::update_geometry (this=0x6ed64c0, edl=0x5f93d50, x=23, y=0, w=937, h=561) at canvas.C:448 #6 0x0000000000a769ef in CWindow::update (this=0x608d5a0, dir=1, overlays=0, tool_window=0, operation=0, timebar=0) at cwindow.C:237 #7 0x0000000000c6a94b in TimeBar::select_region (this=0x6edb8c0, position=7.8278200000000009) at timebar.C:922 #8 0x0000000000c6a120 in TimeBar::button_press_event (this=0x6edb8c0) at timebar.C:753 #9 0x0000000000d84e34 in BC_WindowBase::dispatch_button_press (this=0x6edb8c0) at bcwindowbase.C:1584 #10 0x0000000000d84e0e in BC_WindowBase::dispatch_button_press (this=0x687e840) at bcwindowbase.C:1581 #11 0x0000000000d837a4 in BC_WindowBase::dispatch_event (this=0x687e840) at bcwindowbase.C:1056 #12 0x0000000000d82793 in BC_WindowBase::run_window (this=0x687e840) at bcwindowbase.C:741 #13 0x0000000000a7676c in CWindow::run (this=0x608d5a0) at cwindow.C:204 #14 0x0000000000da4f5d in Thread::entrypoint (parameters=0x608d5a0) at thread.C:65 #15 0x00007ffff7cae4e2 in start_thread () from /lib64/libpthread.so.0 #16 0x00007ffff7539693 in clone () from /lib64/libc.so.6 (gdb) up #1 0x0000000000d95f3a in Condition::lock (this=0x6ed27f0, location=0x2b19f64 "Canvas::refresh") at condition.C:64 64 while(value <= 0) pthread_cond_wait(&cond, &mutex); (gdb) p *this $2 = {<trace_info> = {trace = 0x7ffe34000fc0, owner = 140732723623680}, cond = {__data = {{__wseq = 66, __wseq32 = {__low = 66, __high = 0}}, {__g1_start = 62, __g1_start32 = {__low = 62, __high = 0}}, __g_refs = {2, 0}, __g_size = {0, 0}, __g1_orig_size = 4, __wrefs = 8, __g_signals = {0, 0}}, __size = "B", __align = 66}, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 1, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = "", __align = 0}, value = 0, init_value = 1, is_binary = 1, title = 0x2b19f50 "Canvas::canvas_lock"} (gdb) p /x 140732723623680 $3 = 0x7ffee3fff700 (gdb) thr find 0x7ffee3fff700 Thread 81 has target id 'Thread 0x7ffee3fff700 (LWP 2868)' (gdb) thr 81 [Switching to thread 81 (Thread 0x7ffee3fff700 (LWP 2868))] #0 0x00007ffff7cb4d45 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 (gdb) bt #0 0x00007ffff7cb4d45 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #1 0x00007ffff7e9c045 in _XDisplayLockWait () from /lib64/libX11.so.6 #2 0x00007ffff7e9c4ed in _XLockDisplay () from /lib64/libX11.so.6 #3 0x00007ffff7e9bebb in XLockDisplay () from /lib64/libX11.so.6 #4 0x0000000000d8a593 in BC_WindowBase::lock_window (this=0x687e840, location=0x2b97520 "VDeviceX11::open_output") at bcwindowbase.C:3322 #5 0x0000000000d8a545 in BC_WindowBase::lock_window (this=0x6ed2880, location=0x2b97520 "VDeviceX11::open_output") at bcwindowbase.C:3313 #6 0x0000000000a2bc10 in Canvas::lock_canvas (this=0x6ed64c0, loc=0x2b97520 "VDeviceX11::open_output") at canvas.C:94 #7 0x0000000000ca24f5 in VDeviceX11::open_output (this=0x7fffd00070e0) at vdevicex11.C:103 #8 0x0000000000ca63f9 in VideoDevice::open_output (this=0x7fffd0007900, config=0x7fffd000dca0, rate=29.9700298, out_w=1440, out_h=1080, output=0x6ed64c0, single_frame=1) at videodevice.C:689 #9 0x0000000000c23c76 in RenderEngine::open_output (this=0x7fffd000a2d0) at renderengine.C:328 #10 0x0000000000c2361c in RenderEngine::arm_command (this=0x7fffd000a2d0, command=0x6d7d910) at renderengine.C:180 #11 0x0000000000bc1553 in PlaybackEngine::arm_render_engine (this=0x6f3fff0) at playbackengine.C:147 #12 0x0000000000bc1f99 in PlaybackEngine::run (this=0x6f3fff0) at playbackengine.C:401 #13 0x0000000000da4f5d in Thread::entrypoint (parameters=0x6f3fff0) at thread.C:65 #14 0x00007ffff7cae4e2 in start_thread () from /lib64/libpthread.so.0 #15 0x00007ffff7539693 in clone () from /lib64/libc.so.6 (gdb) q A debugging session is active. On Mon, Mar 2, 2020 at 7:35 PM Andrew Randrianasulu <[email protected]> wrote:
..more debug
So, after looking at things with gdb (as suggested by Bill)
I enabled some more debug this time in canvas.C:
diff --git a/cinelerra-5.1/cinelerra/canvas.C b/cinelerra-5.1/cinelerra/canvas.C index 17d5a42..8bfa594 100644 --- a/cinelerra-5.1/cinelerra/canvas.C +++ b/cinelerra-5.1/cinelerra/canvas.C @@ -368,9 +368,12 @@ int Canvas::get_scrollbars(EDL *edl) h_needed = h_visible = edl ? edl->session->output_h : view_h;
int need_xscroll = 0, need_yscroll = 0; + printf("Canvas::get_scrollbars\n"); if( edl && use_scrollbars ) { float zoom_x, zoom_y, conformed_w, conformed_h; + printf("before get_zoom\n"); get_zooms(edl, 0, zoom_x, zoom_y, conformed_w, conformed_h); + printf("after get_zoom\n"); w_visible = canvas_w / zoom_x; h_visible = canvas_h / zoom_y; float output_x = 0, output_y = 0; @@ -381,6 +384,7 @@ int Canvas::get_scrollbars(EDL *edl) output_to_canvas(edl, 0, output_x, output_y); if( output_x > canvas_w ) need_xscroll = 1; if( output_y > canvas_h ) need_yscroll = 1; + printf("Need xscrool, %i , need_yscroll %i \n", need_xscroll, need_yscroll); if( need_xscroll ) { canvas_h -= BC_ScrollBar::get_span(SCROLL_HORIZ); h_visible = canvas_h / zoom_y; @@ -438,6 +442,7 @@ int Canvas::get_scrollbars(EDL *edl)
void Canvas::update_geometry(EDL *edl, int x, int y, int w, int h) { + printf("Canvas::update_geometry\n"); int redraw = 0; if( this->x != x || this->y != y || this->w != w || this->h != h ) @@ -452,9 +457,9 @@ void Canvas::reposition_window(EDL *edl, int x, int y, int w, int h) { this->x = view_x = x; this->y = view_y = y; this->w = view_w = w; this->h = view_h = h; -//printf("Canvas::reposition_window 1\n"); +printf("Canvas::reposition_window 1\n"); get_scrollbars(edl); -//printf("Canvas::reposition_window %d %d %d %d\n", view_x, view_y, view_w, view_h); +printf("Canvas::reposition_window %d %d %d %d\n", view_x, view_y, view_w, view_h); if( canvas_subwindow ) { canvas_subwindow->reposition_window(view_x, view_y, view_w, view_h);
---
and it runs up to:
BC_WindowBase::dispatch_event 956 Cinelerra: Составитель 0xe0445600 4 (ButtonPress) CTimeBar:pixel_to_Position CTimeBar: pixel, 83 CTimebar:pix_to_pos: Got EDL! CTimebar:pix_to_pos: prev_start 0.000000, prev_end -1.000000 CTimeBar:pixel_to_pos start, 0, end 0 BC_WindowBase::dispatch_event this=0xd36fcc8 1360 Canvas::update_geometry Canvas::get_scrollbars before get_zoom after get_zoom Need xscrool, 1 , need_yscroll 1 Canvas::reposition_window 1 Canvas::get_scrollbars before get_zoom after get_zoom Need xscrool, 1 , need_yscroll 1 Canvas::reposition_window 23 0 959 552 BC_WindowBase::dispatch_event this=0xe2f10450 1360 BC_WindowBase::dispatch_event this=0xd6373a0 1360 BC_WindowBase::dispatch_event this=0xd70da30 1360 BC_WindowBase::dispatch_event this=0xd36fcc8 1360 BC_WindowBase::dispatch_event this=0xd43ca60 1360 BC_WindowBase::dispatch_event this=0xd36fcc8 1360
-- Cin mailing list [email protected] https://lists.cinelerra-gg.org/mailman/listinfo/cin