[PyQt] pyqt5_enable_new_onexit_scheme vs. threads
Phil Thompson
phil at riverbankcomputing.com
Wed Sep 18 22:07:49 BST 2019
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