[PyQt] Qt 5.13: Segfault on exit with Windows + QtWebEngine

Florian Bruhin me at the-compiler.org
Wed Jul 17 17:24:27 BST 2019


On Wed, Jul 17, 2019 at 06:10:24PM +0200, Florian Bruhin wrote:
> On Wed, Jul 17, 2019 at 04:58:22PM +0100, Phil Thompson wrote:
> > On 17/07/2019 12:48, Florian Bruhin wrote:
> > > On Wed, Jul 17, 2019 at 11:54:10AM +0100, Phil Thompson wrote:
> > > > On 13/07/2019 16:43, Florian Bruhin wrote:
> > > > > With a quite minimal QtWebEngine example like this:
> > > > >
> > > > >     from PyQt5.QtWebEngineWidgets import QWebEngineProfile
> > > > >     from PyQt5.QtWidgets import QApplication
> > > > >     from PyQt5.QtCore import QTimer
> > > > >
> > > > >     qapp = QApplication([])
> > > > >     p = QWebEngineProfile()
> > > > >     QTimer.singleShot(500, qapp.quit)
> > > > >     qapp.exec_()
> > > > >
> > > > > I get a segfault on exit with Python 3.7.4 and PyQt5/PyQtWebEngine
> > > > > 5.13.0
> > > > > on Windows 10.
> > > > >
> > > > > When I downgrade to PyQt5 5.12.3 and PyQtWebEngine 5.12.1 things work
> > > > > fine.
> > > > >
> > > > > Unfortunately I haven't been able to get a reliable stacktrace. Here are
> > > > > some
> > > > > examples of the stacks I got:
> > > > > https://paste.the-compiler.org/view/5774da86
> > > > > I don't think they really make sense though.
> > > > 
> > > > I can't reproduce this - although I am using Python v3.7.0.
> > > 
> > > I can reproduce it with Python 3.7.0 as well (both 32 and 64-bit).
> > > 
> > > Note that I don't get a "Python.exe has stopped" window, but "echo $?"
> > > shows
> > > False in Powershell.
> > > 
> > > Similarly, running it from Python:
> > > 
> > >   subprocess.run([sys.executable, 'segv.py'], check=True)
> > > 
> > > Gives me:
> > > 
> > >   subprocess.CalledProcessError: Command '['...\\python.exe',
> > > 'segv.py']' returned non-zero exit status 3221225477.
> > > 
> > > Where 3221225477 is 0xC0000005, i.e. an access violation.
> > 
> > I can reproduce that. However if I build the latest PyQt against Qt v5.12.4
> > the problem goes away, which suggests a Qt problem. I can only suggest
> > playing with things to try and get things destroyed in a different order,
> > then I might be able to add a workaround.
> 
> Using qapp as a context manager seems to fix it. 
> Putting everything into a run() function (without "global qapp") and calling
> that also does.
> 
> In other words, if the QApplication is destroyed *before* whatever QtWebEngine
> initializes internally it seems to not segfault.
> 
> That seems the exact opposite of what's recommended here though:
> https://www.riverbankcomputing.com/static/Docs/PyQt5/gotchas.html#crashes-on-exit

FWIW I also can't reproduce the issue with PySide2 5.13.0 (with a simple
s/PyQt5/PySide2/ in the original reproducer).

(Sorry for the follow-up - only occurred to me to try that after I already sent
my original mail)

Florian

-- 
https://www.qutebrowser.org | me at the-compiler.org (Mail/XMPP)
   GPG: 916E B0C8 FD55 A072 | https://the-compiler.org/pubkey.asc
         I love long mails! | https://email.is-not-s.ms/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20190717/fececa61/attachment-0001.sig>


More information about the PyQt mailing list