bus-slot.c revision cf0fbc49e67b55f8d346fc94de28c90113505297
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering This file is part of systemd.
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering Copyright 2013 Lennart Poettering
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering systemd is free software; you can redistribute it and/or modify it
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering under the terms of the GNU Lesser General Public License as published by
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering (at your option) any later version.
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering systemd is distributed in the hope that it will be useful, but
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering Lesser General Public License for more details.
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering You should have received a copy of the GNU Lesser General Public License
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering slot = malloc0(offsetof(sd_bus_slot, reply_callback) + extra);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ sd_bus_slot* sd_bus_slot_ref(sd_bus_slot *slot) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poetteringvoid bus_slot_disconnect(sd_bus_slot *slot) {
3b3154df7e2773332bb814e167187367a0ccae4aLennart Poettering ordered_hashmap_remove(slot->bus->reply_callbacks, &slot->reply_callback.cookie);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering prioq_remove(slot->bus->reply_callbacks_prioq, &slot->reply_callback, &slot->reply_callback.prioq_idx);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering slot->bus->filter_callbacks_modified = true;
968f319679d9069af037240d0c3bcd126181cdacZbigniew Jędrzejewski-Szmek LIST_REMOVE(callbacks, slot->bus->filter_callbacks, &slot->filter_callback);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering bus_remove_match_internal(slot->bus, slot->match_callback.match_string, slot->match_callback.cookie);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering slot->bus->match_callbacks_modified = true;
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering bus_match_remove(&slot->bus->match_callbacks, &slot->match_callback);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering LIST_REMOVE(callbacks, slot->node_callback.node->callbacks, &slot->node_callback);
874bc134ac6504c45e94174e37af13ff21a6bfe2Zbigniew Jędrzejewski-Szmek bus_node_gc(slot->bus, slot->node_callback.node);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering LIST_REMOVE(enumerators, slot->node_enumerator.node->enumerators, &slot->node_enumerator);
874bc134ac6504c45e94174e37af13ff21a6bfe2Zbigniew Jędrzejewski-Szmek slot->bus->nodes_modified = true;
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering bus_node_gc(slot->bus, slot->node_enumerator.node);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering LIST_REMOVE(object_managers, slot->node_object_manager.node->object_managers, &slot->node_object_manager);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering bus_node_gc(slot->bus, slot->node_object_manager.node);
968f319679d9069af037240d0c3bcd126181cdacZbigniew Jędrzejewski-Szmek if (slot->node_vtable.node && slot->node_vtable.interface && slot->node_vtable.vtable) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering for (v = slot->node_vtable.vtable; v->type != _SD_BUS_VTABLE_END; v++) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering key.interface = slot->node_vtable.interface;
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering x = hashmap_remove(slot->bus->vtable_methods, &key);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering key.interface = slot->node_vtable.interface;
2a0e0692565f0435657c93498e09cbb2d3517152Shawn Landden x = hashmap_remove(slot->bus->vtable_properties, &key);
2a0e0692565f0435657c93498e09cbb2d3517152Shawn Landden LIST_REMOVE(vtables, slot->node_vtable.node->vtables, &slot->node_vtable);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering bus_node_gc(slot->bus, slot->node_vtable.node);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering assert_not_reached("Wut? Unknown slot type?");
968f319679d9069af037240d0c3bcd126181cdacZbigniew Jędrzejewski-Szmek_public_ sd_bus_slot* sd_bus_slot_unref(sd_bus_slot *slot) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ sd_bus* sd_bus_slot_get_bus(sd_bus_slot *slot) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ void *sd_bus_slot_get_userdata(sd_bus_slot *slot) {
505b6a61c22d5565e9308045c7b9bf79f7d0517eLennart Poettering_public_ void *sd_bus_slot_set_userdata(sd_bus_slot *slot, void *userdata) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ sd_bus_message *sd_bus_slot_get_current_message(sd_bus_slot *slot) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ sd_bus_message_handler_t sd_bus_slot_get_current_handler(sd_bus_slot *slot) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ void* sd_bus_slot_get_current_userdata(sd_bus_slot *slot) {
874bc134ac6504c45e94174e37af13ff21a6bfe2Zbigniew Jędrzejewski-Szmek if (slot->bus->current_slot != slot)
874bc134ac6504c45e94174e37af13ff21a6bfe2Zbigniew Jędrzejewski-Szmek return slot->bus->current_userdata;
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ int sd_bus_slot_set_description(sd_bus_slot *slot, const char *description) {
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering return free_and_strdup(&slot->description, description);
0153028ae379eb7c9a463c548ef73ea392c6cdb0Lennart Poettering_public_ int sd_bus_slot_get_description(sd_bus_slot *slot, const char **description) {