kdeui: fix KDebugger events log thread-safety issue

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-04-27 18:33:00 +03:00
parent 3d5c97fa56
commit 307e136a13

View file

@ -37,6 +37,7 @@
#include <QHeaderView> #include <QHeaderView>
#include <QMetaProperty> #include <QMetaProperty>
#include <QElapsedTimer> #include <QElapsedTimer>
#include <QMutex>
#include <QTimer> #include <QTimer>
Q_DECLARE_METATYPE(QObject*); Q_DECLARE_METATYPE(QObject*);
@ -587,7 +588,7 @@ void KDebuggerFuzzer::run()
QString eventmessage = QLatin1String("Sending event - "); QString eventmessage = QLatin1String("Sending event - ");
eventmessage.append(kEventString(&fuzzevent)); eventmessage.append(kEventString(&fuzzevent));
emit message(eventmessage); emit message(eventmessage);
//QApplication::sendEvent(m_object, &fuzzevent); QApplication::sendEvent(m_object.data(), &fuzzevent);
} }
// TODO: set a random property to random value // TODO: set a random property to random value
@ -638,6 +639,7 @@ private:
QPointer<QObject> m_object; QPointer<QObject> m_object;
QMap<QObject*,QPointer<QObject>> m_objects; QMap<QObject*,QPointer<QObject>> m_objects;
QMutex m_eventsmutex;
QTimer* m_fuzzchecktimer; QTimer* m_fuzzchecktimer;
}; };
@ -684,15 +686,18 @@ void KDebuggerPrivate::addObject(QObject *object, QTreeWidgetItem *parentitem)
void KDebuggerPrivate::slotCheckFuzzState() void KDebuggerPrivate::slotCheckFuzzState()
{ {
if (fuzzpool->activeThreadCount() > 0) { if (fuzzpool->activeThreadCount() > 0) {
objectssearchline->setEnabled(false); if (!m_fuzzchecktimer->isActive()) {
objectswidget->setEnabled(false); m_fuzzchecktimer->start();
propertieswidget->setEnabled(false); objectssearchline->setEnabled(false);
threadfuzzbox->setEnabled(false); objectswidget->setEnabled(false);
eventfuzzbox->setEnabled(false); propertieswidget->setEnabled(false);
propertyfuzzbox->setEnabled(false); threadfuzzbox->setEnabled(false);
durationfuzzedit->setEnabled(false); eventfuzzbox->setEnabled(false);
fuzzbutton->setText(i18n("Stop")); propertyfuzzbox->setEnabled(false);
fuzzbutton->setIcon(KIcon("process-stop")); durationfuzzedit->setEnabled(false);
fuzzbutton->setText(i18n("Stop"));
fuzzbutton->setIcon(KIcon("process-stop"));
}
} else { } else {
objectssearchline->setEnabled(true); objectssearchline->setEnabled(true);
objectswidget->setEnabled(true); objectswidget->setEnabled(true);
@ -829,6 +834,7 @@ bool KDebuggerPrivate::eventFilter(QObject *object, QEvent *event)
QString eventline = kObjectString(object); QString eventline = kObjectString(object);
eventline.append(QLatin1String(" - ")); eventline.append(QLatin1String(" - "));
eventline.append(kEventString(event)); eventline.append(kEventString(event));
QMutexLocker locker(&m_eventsmutex);
eventsedit->append(eventline); eventsedit->append(eventline);
break; break;
} }
@ -936,7 +942,7 @@ void KDebuggerPrivate::slotFuzzReleased()
fuzzpool->start(fuzzer); fuzzpool->start(fuzzer);
} }
m_fuzzchecktimer->start(); slotCheckFuzzState();
} }
void KDebuggerPrivate::slotMessage(const QString &message) void KDebuggerPrivate::slotMessage(const QString &message)