X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bus%2Factivation.c;h=0dfce3f8935800f7efa0b8298ab8929cd545fb96;hb=e55fd2c6706e41f6933e1656ac3da7527ee2514f;hp=c7d08baafc1cd6ba234c57766353417fc800e177;hpb=3f4086f0fdd1cc7fc03585ec9f750897fb3c1d55;p=platform%2Fupstream%2Fdbus.git diff --git a/bus/activation.c b/bus/activation.c index c7d08ba..0dfce3f 100644 --- a/bus/activation.c +++ b/bus/activation.c @@ -2,6 +2,7 @@ /* activation.c Activation of services * * Copyright (C) 2003 CodeFactory AB + * Copyright (C) 2003 Red Hat, Inc. * * Licensed under the Academic Free License version 1.2 * @@ -119,6 +120,8 @@ add_desktop_file_entry (BusActivation *activation, char *name, *exec; BusActivationEntry *entry; + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + name = NULL; exec = NULL; entry = NULL; @@ -194,19 +197,21 @@ load_directory (BusActivation *activation, DBusString full_path; BusDesktopFile *desktop_file; DBusError tmp_error; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); _dbus_string_init_const (&dir, directory); iter = NULL; desktop_file = NULL; - if (!_dbus_string_init (&filename, _DBUS_INT_MAX)) + if (!_dbus_string_init (&filename)) { BUS_SET_OOM (error); return FALSE; } - if (!_dbus_string_init (&full_path, _DBUS_INT_MAX)) + if (!_dbus_string_init (&full_path)) { BUS_SET_OOM (error); _dbus_string_free (&filename); @@ -240,10 +245,8 @@ load_directory (BusActivation *activation, if (!_dbus_string_ends_with_c_str (&filename, ".service")) { - const char *filename_c; - _dbus_string_get_const_data (&filename, &filename_c); _dbus_verbose ("Skipping non-.service file %s\n", - filename_c); + _dbus_string_get_const_data (&filename)); continue; } @@ -251,11 +254,8 @@ load_directory (BusActivation *activation, if (desktop_file == NULL) { - const char *full_path_c; - - _dbus_string_get_const_data (&full_path, &full_path_c); - - _dbus_verbose ("Could not load %s: %s\n", full_path_c, + _dbus_verbose ("Could not load %s: %s\n", + _dbus_string_get_const_data (&full_path), tmp_error.message); if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY)) @@ -270,15 +270,11 @@ load_directory (BusActivation *activation, if (!add_desktop_file_entry (activation, desktop_file, &tmp_error)) { - const char *full_path_c; - bus_desktop_file_free (desktop_file); desktop_file = NULL; - - _dbus_string_get_const_data (&full_path, &full_path_c); _dbus_verbose ("Could not add %s to activation entry list: %s\n", - full_path_c, tmp_error.message); + _dbus_string_get_const_data (&full_path), tmp_error.message); if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY)) { @@ -319,14 +315,16 @@ load_directory (BusActivation *activation, } BusActivation* -bus_activation_new (BusContext *context, - const char *address, - const char **directories, - DBusError *error) +bus_activation_new (BusContext *context, + const DBusString *address, + DBusList **directories, + DBusError *error) { - int i; BusActivation *activation; - + DBusList *link; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + activation = dbus_new0 (BusActivation, 1); if (activation == NULL) { @@ -337,9 +335,7 @@ bus_activation_new (BusContext *context, activation->refcount = 1; activation->context = context; - /* FIXME: We should split up the server addresses. */ - activation->server_address = _dbus_strdup (address); - if (activation->server_address == NULL) + if (!_dbus_string_copy_data (address, &activation->server_address)) { BUS_SET_OOM (error); goto failed; @@ -363,12 +359,12 @@ bus_activation_new (BusContext *context, } /* Load service files */ - i = 0; - while (directories[i] != NULL) + link = _dbus_list_get_first_link (directories); + while (link != NULL) { - if (!load_directory (activation, directories[i], error)) + if (!load_directory (activation, link->data, error)) goto failed; - ++i; + link = _dbus_list_get_next_link (directories, link); } return activation; @@ -417,13 +413,16 @@ child_setup (void *data) } dbus_bool_t -bus_activation_service_created (BusActivation *activation, - const char *service_name, - DBusError *error) +bus_activation_service_created (BusActivation *activation, + const char *service_name, + BusTransaction *transaction, + DBusError *error) { BusPendingActivation *pending_activation; DBusMessage *message; DBusList *link; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); /* Check if it's a pending activation */ pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations, service_name); @@ -446,7 +445,8 @@ bus_activation_service_created (BusActivation *activation, goto error; } - if (!dbus_message_append_args (message, + if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS) || + !dbus_message_append_args (message, DBUS_TYPE_UINT32, DBUS_ACTIVATION_REPLY_ACTIVATED, 0)) { @@ -454,8 +454,8 @@ bus_activation_service_created (BusActivation *activation, BUS_SET_OOM (error); goto error; } - - if (!dbus_connection_send (entry->connection, message, NULL)) + + if (!bus_transaction_send_message (transaction, entry->connection, message)) { dbus_message_unref (message); BUS_SET_OOM (error); @@ -481,6 +481,7 @@ bus_activation_service_created (BusActivation *activation, dbus_bool_t bus_activation_activate_service (BusActivation *activation, DBusConnection *connection, + BusTransaction *transaction, DBusMessage *activation_message, const char *service_name, DBusError *error) @@ -492,6 +493,8 @@ bus_activation_activate_service (BusActivation *activation, DBusString service_str; char *argv[2]; dbus_bool_t retval; + + _DBUS_ASSERT_ERROR_IS_CLEAR (error); entry = _dbus_hash_table_lookup_string (activation->entries, service_name); @@ -515,7 +518,8 @@ bus_activation_activate_service (BusActivation *activation, return FALSE; } - if (!dbus_message_append_args (message, + if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS) || + !dbus_message_append_args (message, DBUS_TYPE_UINT32, DBUS_ACTIVATION_REPLY_ALREADY_ACTIVE, 0)) { @@ -524,7 +528,7 @@ bus_activation_activate_service (BusActivation *activation, return FALSE; } - retval = dbus_connection_send (connection, message, NULL); + retval = bus_transaction_send_message (transaction, connection, message); dbus_message_unref (message); if (!retval) BUS_SET_OOM (error); @@ -548,7 +552,7 @@ bus_activation_activate_service (BusActivation *activation, pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations, service_name); if (pending_activation) { - if (!_dbus_list_append (&pending_activation->entries, entry)) + if (!_dbus_list_append (&pending_activation->entries, pending_activation_entry)) { BUS_SET_OOM (error); bus_pending_activation_entry_free (pending_activation_entry); @@ -574,7 +578,7 @@ bus_activation_activate_service (BusActivation *activation, return FALSE; } - if (!_dbus_list_append (&pending_activation->entries, entry)) + if (!_dbus_list_append (&pending_activation->entries, pending_activation_entry)) { BUS_SET_OOM (error); bus_pending_activation_free (pending_activation);