activation: Strip out code to compare by Exec=
authorColin Walters <walters@verbum.org>
Mon, 28 Mar 2011 17:21:35 +0000 (13:21 -0400)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Fri, 8 Apr 2011 12:17:32 +0000 (13:17 +0100)
In commit:
 075945f6        (John (J5) Palmieri     2005-07-14 20:44:15 +0000

some code was added to compare services by Exec key.  The changelog is
not pariticularly informative as to why this was added. But while
debugging other code, we noticed this.

Comparing by Exec key is not in the specification, and triggered a
problem where while converting services to use systemd for activation,
a change was made to use Exec=/bin/false and simply rely on systemd
to activate.

While I think it was broken for the service files to be changed
to Exec=/bin/false, we shouldn't be doing something here that's
not in the spec either.

Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=35750

bus/activation.c

index 7b2a72b..ab6ef51 100644 (file)
@@ -1685,11 +1685,9 @@ bus_activation_activate_service (BusActivation  *activation,
   int argc;
   dbus_bool_t retval;
   DBusHashIter iter;
-  dbus_bool_t activated;
+  dbus_bool_t was_pending_activation;
   DBusString command;
 
-  activated = TRUE;
-
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
 
   if (activation->n_pending_activations >=
@@ -1768,7 +1766,8 @@ bus_activation_activate_service (BusActivation  *activation,
 
   /* Check if the service is being activated */
   pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations, service_name);
-  if (pending_activation)
+  was_pending_activation = (pending_activation != NULL);
+  if (was_pending_activation)
     {
       if (!_dbus_list_append (&pending_activation->entries, pending_activation_entry))
         {
@@ -1875,19 +1874,6 @@ bus_activation_activate_service (BusActivation  *activation,
       pending_activation->n_entries += 1;
       pending_activation->activation->n_pending_activations += 1;
 
-      activated = FALSE;
-      _dbus_hash_iter_init (activation->pending_activations, &iter);
-      while (_dbus_hash_iter_next (&iter))
-        {
-          BusPendingActivation *p = _dbus_hash_iter_get_value (&iter);
-
-          if (strcmp (p->exec, entry->exec) == 0)
-            {
-              activated = TRUE;
-              break;
-            }
-        }
-
       if (!_dbus_hash_table_insert_string (activation->pending_activations,
                                            pending_activation->service_name,
                                            pending_activation))
@@ -1910,7 +1896,7 @@ bus_activation_activate_service (BusActivation  *activation,
       return FALSE;
     }
 
-  if (activated)
+  if (was_pending_activation)
     return TRUE;
 
   if (bus_context_get_systemd_activation (activation->context))