return 1;
}
+//TODO: copied static func from sd-bus.c - make it shared
static usec_t calc_elapse(sd_bus *bus, uint64_t usec) {
assert(bus);
return now(CLOCK_MONOTONIC) + usec;
}
+//TODO: copied static func from sd-bus.c - make it shared
+static int timeout_compare(const void *a, const void *b) {
+ const struct reply_callback *x = a, *y = b;
+
+ if (x->timeout_usec != 0 && y->timeout_usec == 0)
+ return -1;
+
+ if (x->timeout_usec == 0 && y->timeout_usec != 0)
+ return 1;
+
+ if (x->timeout_usec < y->timeout_usec)
+ return -1;
+
+ if (x->timeout_usec > y->timeout_usec)
+ return 1;
+
+ return 0;
+}
+
+
int bus_request_name_kernel_async(sd_bus *bus,
sd_bus_slot **ret_slot,
const char *name,
if (ret < 0)
return ret;
+ ret = ordered_hashmap_ensure_allocated(&bus->reply_callbacks, &uint64_hash_ops);
+ if (ret < 0)
+ return ret;
+
+ ret = prioq_ensure_allocated(&bus->reply_callbacks_prioq, timeout_compare);
+ if (ret < 0)
+ return ret;
+
ret = bus_request_name_kernel(bus, name, flags);
if (ret < 0) {
if (ret < 0)
return ret;
+ ret = ordered_hashmap_ensure_allocated(&bus->reply_callbacks, &uint64_hash_ops);
+ if (ret < 0)
+ return ret;
+
+ ret = prioq_ensure_allocated(&bus->reply_callbacks_prioq, timeout_compare);
+ if (ret < 0)
+ return ret;
+
ret = bus_release_name_kernel(bus, name);
cookie = ++bus->cookie;