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