[Qt-interest] Segfault with an opengl widget

Trond Kjernåsen trond.kjernasen at nokia.com
Thu Sep 2 10:31:54 CEST 2010


Hi,

On 09/01/2010 01:22 PM, Damien R. wrote:
> Hi,
>
> I am using the version 4.6.3-1 of qt on debian sid 64.
>
> I have a segfault when I call QCoreApplication::exit(0) with the
> following backtrace:
>
> #0 QWidgetPrivate::init (this=0x7d9c00, parentWidget=0x0, f=DWARF-2
> expression error: DW_OP_reg operations must be used either alone or in
> conjuction with DW_OP_piece.
> ) at kernel/qwidget.cpp:1124
> #1 0x00007ffff47e7cb1 in QWidget (this=0x85b6b0, dd=<value optimized
> out>, parent=0x0, f=...) at kernel/qwidget.cpp:1044
> #2 0x00007ffff4827722 in QDesktopWidget (this=0x85b6b0) at
> kernel/qdesktopwidget_x11.cpp:220
> #3 0x00007ffff478e5cc in QApplication::desktop () at
> kernel/qapplication.cpp:3073
> #4 0x00007ffff4832e24 in QWidgetPrivate::create_sys (this=0x808830,
> window=0, initializeWindow=<value optimized out>,
> destroyOldWindow=<value optimized out>) at kernel/qwidget_x11.cpp:551
> #5 0x00007ffff47e57db in QWidget::create (this=0x808710, window=0,
> initializeWindow=112, destroyOldWindow=128) at kernel/qwidget.cpp:1323
> #6 0x00007ffff47e200a in QWidgetPrivate::createWinId (this=<value
> optimized out>, winid=0) at kernel/qwidget.cpp:2324
> #7 0x00007ffff47e601f in QWidget::winId (this=0x808d50) at
> kernel/qwidget.cpp:2306
> #8 0x00007ffff1f7e31a in QGLContext::makeCurrent (this=0x8485d0) at
> qgl_x11.cpp:846
> #9 0x00007ffff1f7d002 in QGLShareContextScope (this=0x845350,
> __in_chrg=<value optimized out>) at
> ../../include/QtOpenGL/private/../../../src/opengl/qgl_p.h:457
> #10 ~QGLTextureGlyphCache (this=0x845350, __in_chrg=<value optimized
> out>) at gl2paintengineex/qtextureglyphcache_gl.cpp:65
> #11 0x00007ffff49b99a2 in ~QFontEngine (this=0x888240, __in_chrg=<value
> optimized out>) at text/qfontengine.cpp:190
> #12 0x00007ffff4a73573 in ~QFontEngineX11FT (this=0x888240,
> __in_chrg=<value optimized out>) at text/qfontengine_x11.cpp:1123
> #13 0x00007ffff49b9c97 in ~QFontEngineMulti (this=0x84ab80,
> __in_chrg=<value optimized out>) at text/qfontengine.cpp:1278
> #14 0x00007ffff4a786d4 in ~QFontEngineMultiFT (this=0x84ab80,
> __in_chrg=<value optimized out>) at text/qfontengine_x11.cpp:902
> #15 0x00007ffff49ad402 in QFontCache::clear (this=0x84a0a0) at
> text/qfont.cpp:2691
> #16 0x00007ffff49b334a in ~QFontCache (this=0x7d9c00, __in_chrg=<value
> optimized out>) at text/qfont.cpp:2631
> #17 0x00007ffff418dc32 in QThreadStorageData::set (this=<value optimized
> out>, p=0x0) at thread/qthreadstorage.cpp:148
> #18 0x00007ffff4809aca in qt_cleanup () at kernel/qapplication_x11.cpp:2593
> #19 0x00007ffff479b1b9 in ~QApplication (this=0x7fffecd5ad90,
> __in_chrg=<value optimized out>) at kernel/qapplication.cpp:1086
>
> So, ~QApplication destroy all widgets (call w->destroy(true, true), the
> destructor of my widget is not called) and when qt_cleanup is called, it
> calls windId() which creates a new widget.
>
> I do not know if it is a bug in qt or if I made a mistake. Can someone
> give me clues ?

You're right, this is a bug in Qt which has already been corrected for 
4.7. QGLContext::makeCurrent() should call internalWinId() instead of 
winId() in that particular case. Could you try to change that and see if 
it gets rid of the crash?

--
Trond K.



More information about the Qt-interest-old mailing list