chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bus: add assert to check that we're not freeing a static structure
[elogind.git]
/
src
/
libsystemd
/
sd-bus
/
sd-bus.c
diff --git
a/src/libsystemd/sd-bus/sd-bus.c
b/src/libsystemd/sd-bus/sd-bus.c
index 83233fd7e676219d44cf55fa0a649b2bc4a394ef..bc4376fb510533478871854717157729fa04c76c 100644
(file)
--- a/
src/libsystemd/sd-bus/sd-bus.c
+++ b/
src/libsystemd/sd-bus/sd-bus.c
@@
-142,6
+142,7
@@
static void bus_free(sd_bus *b) {
hashmap_free_free(b->reply_callbacks);
prioq_free(b->reply_callbacks_prioq);
hashmap_free_free(b->reply_callbacks);
prioq_free(b->reply_callbacks_prioq);
+ assert(b->match_callbacks.type == BUS_MATCH_ROOT);
bus_match_free(&b->match_callbacks);
hashmap_free_free(b->vtable_methods);
bus_match_free(&b->match_callbacks);
hashmap_free_free(b->vtable_methods);
@@
-349,8
+350,6
@@
static int hello_callback(sd_bus *bus, sd_bus_message *reply, void *userdata, sd
assert(reply);
r = sd_bus_message_get_errno(reply);
assert(reply);
r = sd_bus_message_get_errno(reply);
- if (r < 0)
- return r;
if (r > 0)
return -r;
if (r > 0)
return -r;
@@
-1756,7
+1755,7
@@
_public_ int sd_bus_call_async(
if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
if (!BUS_IS_OPEN(bus->state))
return -ENOTCONN;
- r = hashmap_ensure_allocated(&bus->reply_callbacks,
uint64_hash_func, uint64_compare_func
);
+ r = hashmap_ensure_allocated(&bus->reply_callbacks,
&uint64_hash_ops
);
if (r < 0)
return r;
if (r < 0)
return r;
@@
-2107,7
+2106,7
@@
static int process_timeout(sd_bus *bus) {
r = c->callback(bus, m, slot->userdata, &error_buffer);
bus->current_userdata = NULL;
bus->current_handler = NULL;
r = c->callback(bus, m, slot->userdata, &error_buffer);
bus->current_userdata = NULL;
bus->current_handler = NULL;
- bus->current_slot =
sd_bus_slot_unref(slot)
;
+ bus->current_slot =
NULL
;
bus->current_message = NULL;
if (slot->floating) {
bus->current_message = NULL;
if (slot->floating) {
@@
-2115,6
+2114,8
@@
static int process_timeout(sd_bus *bus) {
sd_bus_slot_unref(slot);
}
sd_bus_slot_unref(slot);
}
+ sd_bus_slot_unref(slot);
+
return bus_maybe_reply_error(m, r, &error_buffer);
}
return bus_maybe_reply_error(m, r, &error_buffer);
}
@@
-2203,13
+2204,15
@@
static int process_reply(sd_bus *bus, sd_bus_message *m) {
r = c->callback(bus, m, slot->userdata, &error_buffer);
bus->current_userdata = NULL;
bus->current_handler = NULL;
r = c->callback(bus, m, slot->userdata, &error_buffer);
bus->current_userdata = NULL;
bus->current_handler = NULL;
- bus->current_slot =
sd_bus_slot_unref(slot)
;
+ bus->current_slot =
NULL
;
if (slot->floating) {
bus_slot_disconnect(slot);
sd_bus_slot_unref(slot);
}
if (slot->floating) {
bus_slot_disconnect(slot);
sd_bus_slot_unref(slot);
}
+ sd_bus_slot_unref(slot);
+
return bus_maybe_reply_error(m, r, &error_buffer);
}
return bus_maybe_reply_error(m, r, &error_buffer);
}
@@
-2529,7
+2532,7
@@
static int process_closing(sd_bus *bus, sd_bus_message **ret) {
r = c->callback(bus, m, slot->userdata, &error_buffer);
bus->current_userdata = NULL;
bus->current_handler = NULL;
r = c->callback(bus, m, slot->userdata, &error_buffer);
bus->current_userdata = NULL;
bus->current_handler = NULL;
- bus->current_slot =
sd_bus_slot_unref(slot)
;
+ bus->current_slot =
NULL
;
bus->current_message = NULL;
if (slot->floating) {
bus->current_message = NULL;
if (slot->floating) {
@@
-2537,6
+2540,8
@@
static int process_closing(sd_bus *bus, sd_bus_message **ret) {
sd_bus_slot_unref(slot);
}
sd_bus_slot_unref(slot);
}
+ sd_bus_slot_unref(slot);
+
return bus_maybe_reply_error(m, r, &error_buffer);
}
return bus_maybe_reply_error(m, r, &error_buffer);
}
@@
-3007,6
+3012,10
@@
static int attach_io_events(sd_bus *bus) {
return r;
r = sd_event_source_set_priority(bus->input_io_event_source, bus->event_priority);
return r;
r = sd_event_source_set_priority(bus->input_io_event_source, bus->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_name(bus->input_io_event_source, "bus-input");
} else
r = sd_event_source_set_io_fd(bus->input_io_event_source, bus->input_fd);
} else
r = sd_event_source_set_io_fd(bus->input_io_event_source, bus->input_fd);
@@
-3022,6
+3031,10
@@
static int attach_io_events(sd_bus *bus) {
return r;
r = sd_event_source_set_priority(bus->output_io_event_source, bus->event_priority);
return r;
r = sd_event_source_set_priority(bus->output_io_event_source, bus->event_priority);
+ if (r < 0)
+ return r;
+
+ r = sd_event_source_set_name(bus->input_io_event_source, "bus-output");
} else
r = sd_event_source_set_io_fd(bus->output_io_event_source, bus->output_fd);
} else
r = sd_event_source_set_io_fd(bus->output_io_event_source, bus->output_fd);
@@
-3074,10
+3087,18
@@
_public_ int sd_bus_attach_event(sd_bus *bus, sd_event *event, int priority) {
if (r < 0)
goto fail;
if (r < 0)
goto fail;
+ r = sd_event_source_set_name(bus->time_event_source, "bus-time");
+ if (r < 0)
+ goto fail;
+
r = sd_event_add_exit(bus->event, &bus->quit_event_source, quit_callback, bus);
if (r < 0)
goto fail;
r = sd_event_add_exit(bus->event, &bus->quit_event_source, quit_callback, bus);
if (r < 0)
goto fail;
+ r = sd_event_source_set_name(bus->quit_event_source, "bus-exit");
+ if (r < 0)
+ goto fail;
+
r = attach_io_events(bus);
if (r < 0)
goto fail;
r = attach_io_events(bus);
if (r < 0)
goto fail;
@@
-3317,8
+3338,10
@@
_public_ int sd_bus_get_peer_creds(sd_bus *bus, uint64_t mask, sd_bus_creds **re
}
r = bus_creds_add_more(c, mask, pid, 0);
}
r = bus_creds_add_more(c, mask, pid, 0);
- if (r < 0)
+ if (r < 0) {
+ sd_bus_creds_unref(c);
return r;
return r;
+ }
*ret = c;
return 0;
*ret = c;
return 0;
@@
-3358,3
+3381,21
@@
_public_ int sd_bus_get_name(sd_bus *bus, const char **name) {
*name = bus->connection_name;
return 0;
}
*name = bus->connection_name;
return 0;
}
+
+int bus_get_root_path(sd_bus *bus) {
+ int r;
+
+ if (bus->cgroup_root)
+ return 0;
+
+ r = cg_get_root_path(&bus->cgroup_root);
+ if (r == -ENOENT) {
+ bus->cgroup_root = strdup("/");
+ if (!bus->cgroup_root)
+ return -ENOMEM;
+
+ r = 0;
+ }
+
+ return r;
+}