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