[PyQt] pyqt5_enable_new_onexit_scheme vs. threads

Zach Pincus zpincus at gmail.com
Wed Sep 18 22:18:19 BST 2019


Thanks, Phil! That makes sense.

On Wed, Sep 18, 2019 at 4:07 PM Phil Thompson
<phil at riverbankcomputing.com> wrote:
>
> On 18/09/2019 18:12, Zach Pincus wrote:
> > Hello,
> >
> > As requested, I tested out  pyqt5_enable_new_onexit_scheme(True) with
> > my application on PyQt 5.13.1.
> >
> > At exit, I get the following error:
> > QThread: Destroyed while thread is still running
> > and a segfault.
> >
> > The application spins up a background QThread that currently has no
> > provision for exiting on termination. (It exists to upload textures to
> > an offscreen OpenGL context, and otherwise is just blocked waiting for
> > a new texture to upload.) Without the new onexit scheme, this works
> > just fine.
> >
> > I'm sure this reveals a design flaw in the original application (the
> > thread should probably try to exit cleanly, rather than just die
> > during application exit), but this is at least one case where the new
> > onexit scheme will cause errors to crop up that did not exist before.
> >
> > What would be the best way to make the thread exit cleanly? At atexit
> > python callback that sets a flag to make the thread exit and then
> > waits on the thread? Or connecting (something?) to the aboutToQuit
> > signal that does the same? Or should the new onexit scheme not touch
> > threads in the first place?
>
> The latter option would be trivial to implement. Given that deleting a
> running thread is guaranteed to cause a crash then it makes sense to
> avoid that if possible - even if the root cause is an application design
> bug.
>
> Phil


More information about the PyQt mailing list