Opened 6 years ago

Closed 6 years ago

#582 closed баг (fixed)

Падение при выключении теста звука

Reported by: alx Owned by: alx
Priority: major Milestone: 1 очередь
Component: ПО MC04-Dispatcher. Пульт диспетчера/техника Keywords:
Cc:

Description

В настройках устройств вывода звука есть функция теста, который включается/выключается кнопками "Начать тест"/"Остановить тест".

Если при нажатии кнопки "Начать тест" возникает ошибка (например "ErrorPanel::setAudioDevice(): supported format for card "default" not found"), то при последующем нажатии "Остановить тест" программа падает.

Вот стек при падении:

#0  0x00007ffff7f47a00 in QAudioOutput::stop() () from /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so.5
#1  0x0000000000427f06 in MainAppFrameWindow3::systemStopSoundTest() ()
#2  0x00000000004a69f7 in MainAppFrameWindow3::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
#3  0x00007ffff5c99d2a in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007ffff67b4ff7 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#5  0x00007ffff67b5151 in QAbstractButton::mousePressEvent(QMouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#6  0x00007ffff66fb40f in QWidget::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#7  0x00007ffff66b805c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#8  0x00007ffff66bdc19 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#9  0x00007ffff5c6b38b in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#10 0x00007ffff66bcb32 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#11 0x00007ffff67155bb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#12 0x00007ffff6717b7b in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#13 0x00007ffff66b805c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#14 0x00007ffff66bd516 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#15 0x00007ffff5c6b38b in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#16 0x00007ffff61074e1 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#17 0x00007ffff61091a5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#18 0x00007ffff60ecf08 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#19 0x00007fffe789d200 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#20 0x00007ffff2241197 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#21 0x00007ffff22413f0 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#22 0x00007ffff224149c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#23 0x00007ffff5cc17cf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#24 0x00007ffff5c68b4a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#25 0x00007ffff5c70bec in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#26 0x00000000004266b8 in main ()

Change History (2)

comment:1 by alx, 6 years ago

Если при установке аудио-устройства для него не удается найти поддерживаемый устройством формат (когда в журнал выдается сообщение "supported format for card "default" not found"), audioOutput остается равным NULL. Очевидно, что падение в момент нажатия "Остановить тест" вызвано обращением по NULL-указателю (см. первую строчку стека).

comment:2 by alx, 6 years ago

Resolution: fixed
Status: newclosed

In 947/dispatcher:

Исправлена ошибка: если при старте теста вывода системного звука пульт не может найти
поддерживаемый аудио-устройством формат, объект QAudioOutput не создается, и указатель
audioOutput остается равный NULL. Если позже нажать кнопку "Остановить тест", выполнялся
вызов audioOutput->stop(), и пульт падал из-за обращения по NULL-указателю. Теперь
добавлена проверка на валидность audioOutput. Closes #582.

Note: See TracTickets for help on using tickets.