Bug 94687 - Calc with GTK3 is freezing
Summary: Calc with GTK3 is freezing
Status: RESOLVED FIXED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Calc (show other bugs)
Version:
(earliest affected)
5.1.0.0.alpha0+ Master
Hardware: Other All
: medium normal
Assignee: Stephan Bergmann
URL:
Whiteboard: target:5.1.0
Keywords:
Depends on:
Blocks:
 
Reported: 2015-10-02 06:49 UTC by Luke
Modified: 2016-10-25 19:20 UTC (History)
4 users (show)

See Also:
Crash report or crash signature:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Luke 2015-10-02 06:49:45 UTC
Recent builds have been causing Calc to lock up when I navigate around large spreadsheets.

Steps to reproduce
1. Open  attachment 114686 [details] in a recent build of Calc 
2. Quickly click on each sheet

Results
Depending on the order of the sheets you click on, one of the sheets will cause the UI to lock up. 

Console Errors:
** (soffice:31835): WARNING **: Unknown event notification 34

** (soffice:31835): WARNING **: Invalidate all children called
This warning repeats while the UI is frozen.

If I use
$ SAL_USE_VCLPLUGIN=gtk ./soffice
I cannot reproduce this issue


Tested with Ubuntu 14.4.

Build ID: 419549b095a1bb95ce23bf3fc8866e6b582e6dde -> Bad
Build ID: 589143bc486058e42df5484c111df38c236bc9b7 -> GOOD
Comment 1 Luke 2015-10-05 03:36:30 UTC
I git bisected this bug to:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=6f1e77fc600f776433a759172323b4afec3d811e is the first bad commit

Author: Stephan Bergmann <sbergman@redhat.com>
committer:Eike Rathke <erack@redhat.com>
rhbz#1264753: Avoid this being release()ed to 0 in ScAccessibleDocument ctor

Stephan or Eike, 
Can you please take a look? I've noticed this regression in a couple of different spreadsheets already.
Comment 2 Buovjaga 2015-10-05 10:08:40 UTC
Could not repro.

I tried to make sure it ran with GTK3:
SAL_USE_VCLPLUGIN=gtk3 ./soffice

But somehow the UI elements don't look very Gnome3-like..
It should work with a debug build, right?
It did say this in the terminal:
warn:vcl.plugadapt:9302:1:vcl/unx/generic/plugadapt/salplug.cxx:123: could not load shared object libvclplug_gtk3lo.so

Antergos 64-bit, Gnome 3.18
LibO Version: 5.1.0.0.alpha1+
Build ID: 9d2cf7a61afa89139a9d189e11027abbd36b63f9
TinderBox: Linux-rpm_deb-x86_64@70-TDF-dbg, Branch:master, Time: 2015-10-04_23:30:36
Locale: fi-FI (fi_FI.utf8)
Comment 3 Stephan Bergmann 2015-10-05 11:51:07 UTC
can reproduce; problem appears to be that ScTabViewShell::BroadcastAccessibility -> SfxBroadcaster::Broadcast -> ... -> SfxBroadcaster::AddListener keeps adding more listeners to the broadcaster's m_Listeners while it is broadcasting;

> SfxBroadcaster::AddListener(SfxListener&) (this=0x87d7280, rListener=...) at svl/source/notify/SfxBroadcaster.cxx:98
> SfxListener::StartListening(SfxBroadcaster&, bool) (this=0x7f0a40b5af10, rBroadcaster=..., bPreventDups=false) at svl/source/notify/lstner.cxx:84
> ScTabViewShell::AddAccessibilityObject(SfxListener&) (this=0x8588bb0, rObject=...) at sc/source/ui/view/tabvwshh.cxx:226
> ScAccessibleSpreadsheet::ConstructScAccessibleSpreadsheet(ScAccessibleDocument*, ScTabViewShell*, short, ScSplitPos) (this=0x7f0a40b5ae70, pAccDoc=0x7f0a49c24208, pViewShell=0x8588bb0, nTab=2, eSplitPos=SC_SPLIT_BOTTOMLEFT) at sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx:300
> ScAccessibleSpreadsheet::ScAccessibleSpreadsheet(ScAccessibleDocument*, ScTabViewShell*, short, ScSplitPos) (this=0x7f0a40b5ae70, pAccDoc=0x7f0a49c24208, pViewShell=0x8588bb0, nTab=2, eSplitPos=SC_SPLIT_BOTTOMLEFT) at sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx:263
> ScAccessibleDocument::GetAccessibleSpreadsheet() (this=0x7f0a49c24208) at sc/source/ui/Accessibility/AccessibleDocument.cxx:2222
> ScAccessibleDocument::getAccessibleChild(int) (this=0x7f0a49c24208, nIndex=0) at sc/source/ui/Accessibility/AccessibleDocument.cxx:1813
> non-virtual thunk to ScAccessibleDocument::getAccessibleChild(int) () at sc/source/ui/Accessibility/AccessibleDocument.cxx:1795
> AtkListener::updateChildList(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleContext> const&) (this=0x7f0a4108f5b0, pContext=uno::Reference to (ScAccessibleDocument *) 0x7f0a49c24278) at vcl/unx/gtk3/a11y/../../gtk/a11y/atklistener.cxx:137
> AtkListener::handleInvalidateChildren(com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessibleContext> const&) (this=0x7f0a4108f5b0, rxParent=uno::Reference to (ScAccessibleDocument *) 0x7f0a49c24278) at vcl/unx/gtk3/a11y/../../gtk/a11y/atklistener.cxx:231
> AtkListener::notifyEvent(com::sun::star::accessibility::AccessibleEventObject const&) (this=0x7f0a4108f5b0, aEvent=...) at vcl/unx/gtk3/a11y/../../gtk/a11y/atklistener.cxx:307
> comphelper::AccessibleEventNotifier::addEvent(unsigned int, com::sun::star::accessibility::AccessibleEventObject const&) (_nClient=9, _rEvent=...) at comphelper/source/misc/accessibleeventnotifier.cxx:281
> ScAccessibleContextBase::CommitChange(com::sun::star::accessibility::AccessibleEventObject const&) const (this=0x7f0a49c24208, rEvent=...) at sc/source/ui/Accessibility/AccessibleContextBase.cxx:519
> ScAccessibleDocument::Notify(SfxBroadcaster&, SfxHint const&) (this=0x7f0a49c24208, rBC=..., rHint=...) at sc/source/ui/Accessibility/AccessibleDocument.cxx:1581
> SfxBroadcaster::Broadcast(SfxHint const&) (this=0x87d7280, rHint=...) at svl/source/notify/SfxBroadcaster.cxx:51
> ScTabViewShell::BroadcastAccessibility(SfxHint const&) (this=0x8588bb0, rHint=...) at sc/source/ui/view/tabvwshh.cxx:252
> ScTabView::TabChanged(bool) (this=0x8588c18, bSameTabButMoved=false) at sc/source/ui/view/tabview5.cxx:288
> ScTabView::SetTabNo(short, bool, bool, bool) (this=0x8588c18, nTab=2, bNew=false, bExtendSelection=true, bSameTabButMoved=false) at sc/source/ui/view/tabview3.cxx:1651
> ScTabViewShell::Execute(SfxRequest&) (this=0x8588bb0, rReq=...) at sc/source/ui/view/tabvwsh3.cxx:459
> SfxStubScTabViewShellExecute(SfxShell*, SfxRequest&) (pShell=0x8588bb0, rReq=...) at workdir/SdiTarget/sc/sdi/scslots.hxx:1510
> SfxShell::CallExec(void (*)(SfxShell*, SfxRequest&), SfxRequest&) (this=0x8588bb0, pFunc=0x7f0ae7936b90 <SfxStubScTabViewShellExecute(SfxShell*, SfxRequest&)>, rReq=...) at include/sfx2/shell.hxx:208
> SfxDispatcher::Call_Impl(SfxShell&, SfxSlot const&, SfxRequest&, bool) (this=0x54acfd0, rShell=..., rSlot=..., rReq=..., bRecord=true) at sfx2/source/control/dispatch.cxx:259
> SfxDispatcher::_Execute(SfxShell&, SfxSlot const&, SfxRequest&, SfxCallMode) (this=0x54acfd0, rShell=..., rSlot=..., rReq=..., eCallMode=SfxCallMode::RECORD) at sfx2/source/control/dispatch.cxx:849
> SfxDispatcher::Execute(unsigned short, SfxCallMode, SfxPoolItem const*, ...) (this=0x54acfd0, nSlot=26042, eCall=SfxCallMode::RECORD, pArg1=0x7ffdef6effc8) at sfx2/source/control/dispatch.cxx:1067
> ScTabControl::Select() (this=0x859c040) at sc/source/ui/view/tabcont.cxx:275
> TabBar::ImplSelect() (this=0x859c040) at svtools/source/control/tabbar.cxx:1560
> TabBar::MouseButtonDown(MouseEvent const&) (this=0x859c040, rMEvt=...) at svtools/source/control/tabbar.cxx:1168
> ScTabControl::MouseButtonDown(MouseEvent const&) (this=0x859c040, rMEvt=...) at sc/source/ui/view/tabcont.cxx:178
> ImplHandleMouseEvent(vcl::Window*, MouseNotifyEvent, bool, long, long, unsigned long, unsigned short, MouseEventModifiers) (pWindow=0x200fe20, nSVEvent=MouseNotifyEvent::MOUSEBUTTONDOWN, bMouseLeave=false, nX=335, nY=966, nMsgTime=17329771, nCode=1, nMode=(MouseEventModifiers::SIMPLECLICK | MouseEventModifiers::SELECT)) at vcl/source/window/winproc.cxx:723
> ImplHandleSalMouseButtonDown(vcl::Window*, SalMouseEvent*) (pWindow=0x200fe20, pEvent=0x7ffdef6f1138) at vcl/source/window/winproc.cxx:2069
> ImplWindowFrameProc(vcl::Window*, SalFrame*, unsigned short, void const*) (_pWindow=0x200fe20, nEvent=3, pEvent=0x7ffdef6f1138) at vcl/source/window/winproc.cxx:2408
> SalFrame::CallCallback(unsigned short, void const*) const (this=0x1bfae00, nEvent=3, pEvent=0x7ffdef6f1138) at vcl/inc/salframe.hxx:255
> GtkSalFrame::signalButton(_GtkWidget*, _GdkEventButton*, void*) (pEvent=0x7f0ac0048600, frame=0x1bfae00) at vcl/unx/gtk3/window/../../gtk/window/gtksalframe.cxx:3470
> _gtk_marshal_BOOLEAN__BOXED () at /lib64/libgtk-3.so.0
> <emit signal ??? on instance 0x1bac480 [GtkEventBox]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at gsignal.c:3361
> g_closure_invoke (closure=0x200cda0, return_value=return_value@entry=0x7ffdef6f1310, n_param_values=2, param_values=param_values@entry=0x7ffdef6f1370, invocation_hint=invocation_hint@entry=0x7ffdef6f12f0) at gclosure.c:768
> signal_emit_unlocked_R (node=node@entry=0x19cd320, detail=detail@entry=0, instance=instance@entry=0x1bac480, emission_return=emission_return@entry=0x7ffdef6f1490, instance_and_params=instance_and_params@entry=0x7ffdef6f1370) at gsignal.c:3549
> g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffdef6f1540) at gsignal.c:3315
> gtk_widget_event_internal () at /lib64/libgtk-3.so.0
> propagate_event () at /lib64/libgtk-3.so.0
> gtk_main_do_event () at /lib64/libgtk-3.so.0
> gdk_event_source_dispatch () at /lib64/libgdk-3.so.0
> g_main_context_dispatch (context=0xeea450) at gmain.c:3122
> g_main_context_dispatch (context=context@entry=0xeea450) at gmain.c:3737
> g_main_context_iterate (context=context@entry=0xeea450, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3808
> g_main_context_iteration (context=0xeea450, may_block=1) at gmain.c:3869
> GtkData::Yield(bool, bool) (this=0xe2f4a0, bWait=true, bHandleAllCurrentEvents=false) at vcl/unx/gtk3/app/../../gtk/app/gtkdata.cxx:607
> GtkInstance::DoYield(bool, bool, unsigned long) (this=0xe2f2c0, bWait=true, bHandleAllCurrentEvents=false, nReleased=0) at vcl/unx/gtk3/app/../../gtk/app/gtkinst.cxx:406
> ImplYield(bool, bool, unsigned long) (i_bWait=true, i_bAllEvents=false, nReleased=0) at vcl/source/app/svapp.cxx:359
> Application::Yield() () at vcl/source/app/svapp.cxx:403
> Application::Execute() () at vcl/source/app/svapp.cxx:336
> desktop::Desktop::Main() (this=0x7ffdef6f26a8) at desktop/source/app/app.cxx:1588
> ImplSVMain() () at vcl/source/app/svmain.cxx:169
> SVMain() () at vcl/source/app/svmain.cxx:206
> soffice_main() () at desktop/source/app/sofficemain.cxx:96
> sal_main () at desktop/source/app/main.c:48
> main (argc=3, argv=0x7ffdef6f2858) at desktop/source/app/main.c:47
Comment 4 Commit Notification 2015-10-05 12:15:44 UTC
Stephan Bergmann committed a patch related to this issue.
It has been pushed to "master":

http://cgit.freedesktop.org/libreoffice/core/commit/?id=8a334eb222906909bf77006687411ff9e03d9da3

tdf#94687: Keep original ordering of overall initialization steps

It will be available in 5.1.0.

The patch should be included in the daily builds available at
http://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
http://wiki.documentfoundation.org/Testing_Daily_Builds
Affected users are encouraged to test the fix and report feedback.