[QScintilla] [PyQt] Eric4 issue with splitted views

Hans-Peter Jansen hpj at urpla.net
Wed Mar 26 19:14:06 GMT 2014


[Reposted on Detelv's request in order to address also the qscintilla ML ---
Note to Phil: I really think, that sip.setdestroyonexit is the right approach 
to fix this issue (class), the question is, why it doesn't..]

Hi Detlev,

you're right - splitting is a red herring in this case, just choosing a "New 
view" is sufficient to trigger the exact same traceback, so QScintilla is  
most likely to be in charge of is crash.

Thanks for the hint, Detlev.

Kind regards,
Pete

On Dienstag, 25. März 2014 18:22:20 Detlev Offenbach wrote:
> Hi Hans-Peter,
> 
> Does this only happen when you SPLIT the view or when you create a new view
> without a new split as well? If so it might be a QScintilla issue because
> when a new view is created both views are accessing the *same* document,
> i.e. the very same instance.
> 
> Regards,
> Detlev
> 
> On Monday 24 March 2014, 15:01:34 Hans-Peter Jansen wrote:
> > Dear Phil,
> > 
> > I suffer from a long term Eric 4 problem, where eric crashes consistently
> > on exit, when I split just one view.
> > 
> > Prerequisites:
> > Running on KDE4 with PyQt4 available
> > Using tabbed view in Viewmanager
> > 
> > Reproduce:
> > Just running eric with a single file argument, right click into editor,
> > choose "New view (with new split)" and exit reproduces this for me.
> > 
> > Results in:
> > Thread 1 (Thread 0x7fc162564700 (LWP 4712)):
> > [KCrash Handler]
> > #6  0x00007fc15d707aca in QWidgetPrivate::deleteTLSysExtra
> > (this=this at entry=0x44e45f0) at kernel/qwidget_x11.cpp:2885 #7
> > 0x00007fc15d6bea85 in QWidgetPrivate::deleteExtra
> > (this=this at entry=0x44e45f0) at kernel/qwidget.cpp:1832 #8
> > 0x00007fc15d6becad in QWidgetPrivate::~QWidgetPrivate (this=0x44e45f0,
> > __in_chrg=<optimized out>) at kernel/qwidget.cpp:365 #9 
> > 0x00007fc15daa8e75
> > in ~QMenuPrivate (this=0x44e45f0, __in_chrg=<optimized out>) at
> > widgets/qmenu_p.h:171 #10 QMenuPrivate::~QMenuPrivate (this=0x44e45f0,
> > __in_chrg=<optimized out>) at widgets/qmenu_p.h:183 #11 0x00007fc15fc68c35
> > in cleanup (pointer=<optimized out>) at
> > ../../src/corelib/tools/qscopedpointer.h:62 #12 ~QScopedPointer
> > (this=0x44e4588, __in_chrg=<optimized out>) at
> > ../../src/corelib/tools/qscopedpointer.h:100 #13 QObject::~QObject
> > (this=0x44e4580, __in_chrg=<optimized out>) at kernel/qobject.cpp:816 #14
> > 0x00007fc15d6c76ac in QWidget::~QWidget (this=0x44e4580,
> > __in_chrg=<optimized out>) at kernel/qwidget.cpp:1554 #15
> > 0x00007fc15e5bd989 in sipQMenu::~sipQMenu (this=0x44e4580,
> > __in_chrg=<optimized out>) at sipQtGuiQMenu.cpp:316 #16 0x00007fc15e5bd9fe
> > in release_QMenu (sipCppV=0x44e4580) at sipQtGuiQMenu.cpp:2785 #17
> > 0x00007fc1604ba476 in forgetObject (sw=sw at entry=0x422c2b0) at
> > siplib.c:10891 #18 0x00007fc1604bb599 in sipWrapper_dealloc
> > (self=0x422c2b0) at siplib.c:10443 #19 0x00007fc16209aefa in
> > subtype_dealloc (self=0x422c2b0) at Objects/typeobject.c:1030 #20
> > 0x00007fc1620937e0 in dict_dealloc (mp=0x44f9d50) at
> > Objects/dictobject.c:1010 #21 0x00007fc1620937b9 in dict_dealloc
> > (mp=0x3d30f20) at Objects/dictobject.c:1010 #22 0x00007fc1604b86a7 in
> > sipSimpleWrapper_clear (self=self at entry=0x3c11b00) at siplib.c:10016 #23
> > 0x00007fc1604bb4c4 in sipWrapper_clear (self=0x3c11b00) at siplib.c:10402
> > #24 0x00007fc16207b232 in delete_garbage (old=0x7fc162370260
> > <generations+96>, collectable=0x7fff271e2780) at Modules/gcmodule.c:820
> > #25
> > collect (generation=2) at Modules/gcmodule.c:984
> > #26 0x00007fc16207b710 in PyGC_Collect () at Modules/gcmodule.c:1440
> > #27 0x00007fc1620727b9 in Py_Finalize () at Python/pythonrun.c:449
> > #28 0x00007fc162072255 in Py_Exit (sts=0) at Python/pythonrun.c:1777
> > #29 0x00007fc1620723a4 in handle_system_exit () at Python/pythonrun.c:1151
> > #30 0x00007fc1620723d1 in PyErr_PrintEx
> > (set_sys_last_vars=set_sys_last_vars at entry=1) at Python/pythonrun.c:1161
> > #31 0x00007fc162072691 in PyErr_Print () at Python/pythonrun.c:1064 #32
> > 0x00007fc162072bf9 in PyRun_SimpleFileExFlags (fp=fp at entry=0x83e4e0,
> > filename=<optimized out>, filename at entry=0x7fff271e4f42
> > "/usr/lib64/python2.7/site-packages/eric4/eric4.py",
> > closeit=closeit at entry=1, flags=flags at entry=0x7fff271e29e0) at
> > Python/pythonrun.c:952 #33 0x00007fc16207312c in PyRun_AnyFileExFlags
> > (fp=fp at entry=0x83e4e0, filename=filename at entry=0x7fff271e4f42
> > "/usr/lib64/python2.7/site-packages/eric4/eric4.py",
> > closeit=closeit at entry=1, flags=flags at entry=0x7fff271e29e0) at
> > Python/pythonrun.c:752 #34 0x00007fc16207a81e in Py_Main (argc=<optimized
> > out>, argv=0x7fff271e2b98) at Modules/main.c:640 #35 0x00007fc161a31be5 in
> > __libc_start_main () from /lib64/libc.so.6 #36 0x0000000000400791 in
> > _start
> > ()
> > 
> > 
> > As you can see, this crash is a typical case of "dtor called" after python
> > exited. Of course, there isn't much, you can do about this. You even
> > provide sip.setdestroyonexit() for such issues. But that's exactly my
> > problem here.
> > 
> > With this patch applied, shouldn't such an issue not happen anymore:
> > 
> > --- eric4.py.orig       2014-01-07 07:46:19.000000000 +0100
> > +++ eric4.py    2014-03-24 10:07:04.223139840 +0100
> > @@ -17,6 +17,7 @@ import traceback
> > 
> >  import cStringIO
> >  import time
> >  import logging
> > 
> > +import sip
> > 
> >  from PyQt4.QtCore import QTextCodec, SIGNAL, SLOT, qWarning, \
> >  
> >      QLibraryInfo, QTimer
> > 
> > @@ -162,7 +163,12 @@ def main():
> >      global args, mainWindow, splash, restartArgs
> >      
> >      sys.excepthook = excepthook
> > 
> > -
> > +
> > +    try:
> > +        sip.setdestroyonexit(True)
> > +    except AttributeError:
> > +        pass
> > +
> > 
> >      options = [\
> >      
> >          ("--config=configDir",
> >          
> >           "use the given directory as the one containing the config
> >           files"),
> > 
> > I checked it also without exception handling, just in case, but problem
> > persists. Since I always use splitted views, and don't want to miss eric's
> > KDE integration, I would like to see this fixed.
> > 
> > I've checked eric's source for suspect operations during the split, but
> > couldn't spot any fishy operations. (ViewManager/ViewManager.py,
> > Plugins/ViewManagerPlugins/Tabview/Tabview.py).


More information about the QScintilla mailing list