Fix segfault when exiting app running under eglfs
In function QWindow::destroy() the platformWindow is destroyed (QEglFSWindow in this case), but after that the QSurface destructor is called (qsurface.cpp:127), where access to the opengl context is performed (QOpenGLContext::currentContext()->doneCurrent()). Therefore the surface pointer is deleted earlier (gbm_surface_destroy) than the working with it (eglMakeCurrent) is finished. But the event QPlatformSurfaceEvent, that is sent before deleting platformWindow, isn't processed (qwindow.cpp:1665), though we can perform doneCurrent() in the handler of QPlatformSurfaceEvent. The full description with valgrind stacks on bugreports. Task-number: QTBUG-52399 Change-Id: I69035dfd8ba5b5eeec243bc0edd3f571dc9525f9 Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>bb10
parent
b3e9144c3a
commit
8d45759432
|
|
@ -2109,6 +2109,17 @@ bool QWindow::event(QEvent *ev)
|
|||
break;
|
||||
}
|
||||
|
||||
case QEvent::PlatformSurface: {
|
||||
if ((static_cast<QPlatformSurfaceEvent *>(ev))->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed) {
|
||||
#ifndef QT_NO_OPENGL
|
||||
QOpenGLContext *context = QOpenGLContext::currentContext();
|
||||
if (context && context->surface() == static_cast<QSurface *>(this))
|
||||
context->doneCurrent();
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
return QObject::event(ev);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue