diff options
| author | Guido Berhoerster <guido+qt@berhoerster.name> | 2025-01-20 12:45:55 +0100 |
|---|---|---|
| committer | Guido Berhoerster <guido+qt@berhoerster.name> | 2025-02-03 12:54:54 +0100 |
| commit | cd02ec3f850c3e6d98cfc199ae586bfb418cc3bd (patch) | |
| tree | 6ccf268d7250b4574b96cefd36b9860b1a5723b6 /src/tools/messageserver/messageserver.cpp | |
| parent | fad203e98ae1d7caa605209f98cd1ac0e5f1a150 (diff) | |
Remove lock file usage from messageserver
Using DBus with a well known name already ensures that only a single instance
can run. Thus refactor the constructor into init method which can fail in case
of DBus errors and exit gracefully without dumping core.
Also exit gracefully in case of database incompatibility
Change-Id: I290cd438d47ea56cef4865a565c305cc2f884906
Reviewed-by: Pekka Vuorela <pvuorela@iki.fi>
Diffstat (limited to 'src/tools/messageserver/messageserver.cpp')
| -rw-r--r-- | src/tools/messageserver/messageserver.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/src/tools/messageserver/messageserver.cpp b/src/tools/messageserver/messageserver.cpp index bfcd4625..6512b9e9 100644 --- a/src/tools/messageserver/messageserver.cpp +++ b/src/tools/messageserver/messageserver.cpp @@ -66,7 +66,23 @@ MessageServer::MessageServer(QObject *parent) newMessageTotal(0), completionAttempted(false) { - qMailLog(Messaging) << "MessageServer ctor begin"; +} + +MessageServer::~MessageServer() +{ + // Unregister from D-Bus. + QDBusConnection dbus = QDBusConnection::sessionBus(); + dbus.unregisterObject("/messageserver"); + if (!dbus.unregisterService("org.qt.messageserver")) { + qWarning() << "Failed to unregister messageserver from D-Bus"; + } else { + qMailLog(Messaging) << "Unregistered messageserver from D-Bus"; + } +} + +bool MessageServer::init() +{ + qMailLog(Messaging) << "MessageServer init begin"; #if defined(Q_OS_UNIX) // Unix signal handlers. We use the trick described here: http://doc.qt.io/qt-5/unix-signals.html @@ -106,14 +122,11 @@ MessageServer::MessageServer(QObject *parent) #endif // defined(Q_OS_UNIX) - QMailMessageCountMap::iterator it = messageCounts.begin(), end = messageCounts.end(); - for ( ; it != end; ++it) - it.value() = 0; - QMailStore *store = QMailStore::instance(); if (store->initializationState() != QMailStore::Initialized) { - qFatal("Messaging DB Invalid: Messaging cannot operate due to database incompatibilty!"); + qWarning("Messaging DB Invalid: Messaging cannot operate due to database incompatibilty!"); // Do not close, however, or QPE will start another instance. + return false; } else { connect(store, SIGNAL(messagesAdded(QMailMessageIdList)), this, SLOT(messagesAdded(QMailMessageIdList))); @@ -130,10 +143,10 @@ MessageServer::MessageServer(QObject *parent) QDBusConnection dbus = QDBusConnection::sessionBus(); if (!dbus.registerObject("/messageserver", handler) || !dbus.registerService("org.qt.messageserver")) { - qFatal("Failed to register to D-Bus, aborting start"); - } else { - qMailLog(Messaging) << "Registered messageserver to D-Bus"; + qWarning() << "Failed to register to D-Bus, aborting start"; + return false; } + qMailLog(Messaging) << "Registered messageserver to D-Bus"; connect(handler, &ServiceHandler::transmissionReady, this, &MessageServer::transmissionCompleted); @@ -160,18 +173,8 @@ MessageServer::MessageServer(QObject *parent) plugin->exec(); } #endif -} -MessageServer::~MessageServer() -{ - // Unregister from D-Bus. - QDBusConnection dbus = QDBusConnection::sessionBus(); - dbus.unregisterObject("/messageserver"); - if (!dbus.unregisterService("org.qt.messageserver")) { - qWarning() << "Failed to unregister messageserver from D-Bus"; - } else { - qMailLog(Messaging) << "Unregistered messageserver from D-Bus"; - } + return true; } void MessageServer::retrievalCompleted(quint64 action) |
