D22946: Include API to generically implement --replace arguments
David Edmundson
noreply at phabricator.kde.org
Fri Nov 1 01:46:06 GMT 2019
davidedmundson added a comment.
I think I didn't explain myself properly. There's a way to do a version that has no race conditions.
Order of events needs to be
1. We try to register our service name with the queued flag
2. We see if we succeeded to register it immediately
3. If it fails, we send a non-blocking quit method to whoever currently owns that name
4. and then wait for our application to be given the service name we've already requested
all except 3 exist already.
INLINE COMMENTS
> kdbusservice.cpp:171
>
> - if (options & KDBusService::Unique) {
> + if (options & KDBusService::Replace && QDBusConnection::sessionBus().interface()->isServiceRegistered(d->serviceName)) {
> + auto message = QDBusMessage::createMethodCall(d->serviceName,
This is still racey
> kdbusservice.cpp:181
> + QEventLoop unregistrationLoop;
> + connect(bus, &QDBusConnectionInterface::serviceUnregistered,
> + this, [&unregistrationLoop, this](const QString &service) {
QDBusConnectionInterface::serviceUnregistered is very different to QDBusServiceWatcher::serviceUnregistered
QDBusConnectionInterface::serviceUnregistered will be called when our process loses the service name it had.
Our process hasn't even requested a service name yet, so this won't happen.
REPOSITORY
R271 KDBusAddons
REVISION DETAIL
https://phabricator.kde.org/D22946
To: apol, #frameworks, davidedmundson
Cc: davidedmundson, broulik, kossebau, kde-frameworks-devel, LeGast00n, GB_2, michaelh, ngraham, bruns
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20191101/f441ea62/attachment-0001.html>
More information about the Kde-frameworks-devel
mailing list