The way process_closing() picks the first entry from reply_callbacks
and works with it makes it likely that it cares about the order.
struct bus_match_node match_callbacks;
Prioq *reply_callbacks_prioq;
struct bus_match_node match_callbacks;
Prioq *reply_callbacks_prioq;
- Hashmap *reply_callbacks;
+ OrderedHashmap *reply_callbacks;
LIST_HEAD(struct filter_callback, filter_callbacks);
Hashmap *nodes;
LIST_HEAD(struct filter_callback, filter_callbacks);
Hashmap *nodes;
case BUS_REPLY_CALLBACK:
if (slot->reply_callback.cookie != 0)
case BUS_REPLY_CALLBACK:
if (slot->reply_callback.cookie != 0)
- hashmap_remove(slot->bus->reply_callbacks, &slot->reply_callback.cookie);
+ ordered_hashmap_remove(slot->bus->reply_callbacks, &slot->reply_callback.cookie);
if (slot->reply_callback.timeout != 0)
prioq_remove(slot->bus->reply_callbacks_prioq, &slot->reply_callback, &slot->reply_callback.prioq_idx);
if (slot->reply_callback.timeout != 0)
prioq_remove(slot->bus->reply_callbacks_prioq, &slot->reply_callback, &slot->reply_callback.prioq_idx);
- hashmap_free_free(b->reply_callbacks);
+ ordered_hashmap_free_free(b->reply_callbacks);
prioq_free(b->reply_callbacks_prioq);
assert(b->match_callbacks.type == BUS_MATCH_ROOT);
prioq_free(b->reply_callbacks_prioq);
assert(b->match_callbacks.type == BUS_MATCH_ROOT);
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_ops);
+ r = ordered_hashmap_ensure_allocated(&bus->reply_callbacks, &uint64_hash_ops);
s->reply_callback.callback = callback;
s->reply_callback.cookie = BUS_MESSAGE_COOKIE(m);
s->reply_callback.callback = callback;
s->reply_callback.cookie = BUS_MESSAGE_COOKIE(m);
- r = hashmap_put(bus->reply_callbacks, &s->reply_callback.cookie, &s->reply_callback);
+ r = ordered_hashmap_put(bus->reply_callbacks, &s->reply_callback.cookie, &s->reply_callback);
if (r < 0) {
s->reply_callback.cookie = 0;
return r;
if (r < 0) {
s->reply_callback.cookie = 0;
return r;
assert_se(prioq_pop(bus->reply_callbacks_prioq) == c);
c->timeout = 0;
assert_se(prioq_pop(bus->reply_callbacks_prioq) == c);
c->timeout = 0;
- hashmap_remove(bus->reply_callbacks, &c->cookie);
+ ordered_hashmap_remove(bus->reply_callbacks, &c->cookie);
c->cookie = 0;
slot = container_of(c, sd_bus_slot, reply_callback);
c->cookie = 0;
slot = container_of(c, sd_bus_slot, reply_callback);
if (m->destination && bus->unique_name && !streq_ptr(m->destination, bus->unique_name))
return 0;
if (m->destination && bus->unique_name && !streq_ptr(m->destination, bus->unique_name))
return 0;
- c = hashmap_remove(bus->reply_callbacks, &m->reply_cookie);
+ c = ordered_hashmap_remove(bus->reply_callbacks, &m->reply_cookie);
assert(bus);
assert(bus->state == BUS_CLOSING);
assert(bus);
assert(bus->state == BUS_CLOSING);
- c = hashmap_first(bus->reply_callbacks);
+ c = ordered_hashmap_first(bus->reply_callbacks);
if (c) {
_cleanup_bus_error_free_ sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
sd_bus_slot *slot;
if (c) {
_cleanup_bus_error_free_ sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
sd_bus_slot *slot;
- hashmap_remove(bus->reply_callbacks, &c->cookie);
+ ordered_hashmap_remove(bus->reply_callbacks, &c->cookie);
c->cookie = 0;
slot = container_of(c, sd_bus_slot, reply_callback);
c->cookie = 0;
slot = container_of(c, sd_bus_slot, reply_callback);