Opened 5 years ago
Closed 3 years ago
#13460 closed Bug Report - General (Trac EOL)
Instability due to QTimer start / stop from non-parent thread
Reported by: | madscientist159 | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | needs_triage |
Component: | MythTV - General | Version: | Unspecified |
Severity: | medium | Keywords: | |
Cc: | Ticket locked: | no |
Description
In a test setup used to verify ATSC tuner functionality on ppc64el, I note that the backend is extremely unstable. When the slave nodes connect, QTimer start / stop messages are dumped, and there is a random chance of the master backend hanging.
Setting QT_FATAL_WARNINGS=1 and running under gdb yields this:
2019-06-03 03:43:18.855982 I MainServer: adding: master-backend(100488f60) as a client (events: 1) | QObject::startTimer: Timers cannot be started from another thread | QObject::startTimer: Timers cannot be started from another thread | QObject::killTimer: Timers cannot be stopped from another thread | QObject::startTimer: Timers cannot be started from another thread | QObject::killTimer: Timers cannot be stopped from another thread | QObject::startTimer: Timers cannot be started from another thread | QObject::killTimer: Timers cannot be stopped from another thread | QObject::startTimer: Timers cannot be started from another thread | | Thread 21 "PT1" received signal SIGABRT, Aborted. | [Switching to Thread 0x7fff8fffef50 (LWP 15317)] | 0x00007ffff4a54228 in __libc_signal_restore_set (set=0x7fff8fffd0e8) at ../sysdeps/unix/sysv/linux/internal-signals.h:84 | 84 ../sysdeps/unix/sysv/linux/internal-signals.h: No such file or directory. | (gdb) bt | #0 0x00007ffff4a54228 in __libc_signal_restore_set (set=0x7fff8fffd0e8) at ../sysdeps/unix/sysv/linux/internal-signals.h:84 | #1 __GI_raise (sig=<optimized out>) at ../sysdeps/unix/sysv/linux/raise.c:48 | #2 0x00007ffff4a3458c in __GI_abort () at abort.c:79 | #3 0x00007ffff50d6cc0 in QMessageLogger::warning(char const*, ...) const () from /usr/lib/powerpc64le-linux-gnu/libQt5Core.so.5 | #4 0x00007ffff53b26e8 in QObject::startTimer(int, Qt::TimerType) () from /usr/lib/powerpc64le-linux-gnu/libQt5Core.so.5 | #5 0x00007ffff53c3530 in QTimer::start() () from /usr/lib/powerpc64le-linux-gnu/libQt5Core.so.5 | #6 0x00007ffff53c357c in QTimer::start(int) () from /usr/lib/powerpc64le-linux-gnu/libQt5Core.so.5 | #7 0x0000000100094df4 in MainServer::HandleAnnounce (this=0x10033da10, slist=..., commands=..., socket=0x100482060) at mainserver.cpp:1856 | #8 0x000000010008657c in MainServer::ProcessRequestWork (this=0x10033da10, sock=0x100482060) at mainserver.cpp:512 | #9 0x0000000100085bb0 in MainServer::ProcessRequest (this=0x10033da10, sock=0x100482060) at mainserver.cpp:458 | #10 0x00000001000e4dcc in ProcessRequestRunnable::run (this=0x7fff8400bbd0) at mainserver.cpp:159 | #11 0x00007ffff6c679bc in MPoolThread::run (this=0x7fff94017e00) at mthreadpool.cpp:140 | #12 0x00007ffff6c6248c in MThreadInternal::run (this=0x10048ee80) at mthread.cpp:79 | #13 0x00007ffff511938c in ?? () from /usr/lib/powerpc64le-linux-gnu/libQt5Core.so.5 | #14 0x00007ffff4fe8b90 in start_thread (arg=0x7fff8f7f0000) at pthread_create.c:486 | #15 0x00007ffff4b41018 in clone () at ../sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S:82 | (gdb)
Change History (2)
Note: See
TracTickets for help on using
tickets.
https://code.mythtv.org/trac/ticket/5766 may be related.
I've also been able to make the master backend hang nearly 100% of the time by trying to tune an HLS stream; as above, a QTimer thread message is printed and the backend deadlocks.