Opened 5 months ago

Last modified 5 months ago

#13460 new Bug Report - General

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 (1)

comment:1 Changed 5 months ago by madscientist159

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.

Note: See TracTickets for help on using tickets.