hashmap: introduce hash_ops to make struct Hashmap smaller
It is redundant to store 'hash' and 'compare' function pointers in struct Hashmap separately. The functions always comprise a pair. Store a single pointer to struct hash_ops instead. systemd keeps hundreds of hashmaps, so this saves a little bit of memory.
This commit is contained in:
@@ -206,7 +206,7 @@ static int link_new(Manager *manager, sd_rtnl_message *message, Link **ret) {
|
||||
if (r < 0)
|
||||
return -ENOMEM;
|
||||
|
||||
r = hashmap_ensure_allocated(&manager->links, NULL, NULL);
|
||||
r = hashmap_ensure_allocated(&manager->links, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ int manager_new(Manager **ret) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
m->netdevs = hashmap_new(string_hash_func, string_compare_func);
|
||||
m->netdevs = hashmap_new(&string_hash_ops);
|
||||
if (!m->netdevs)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -485,15 +485,15 @@ int manager_save(Manager *m) {
|
||||
assert(m->state_file);
|
||||
|
||||
/* We add all NTP and DNS server to a set, to filter out duplicates */
|
||||
dns = set_new(string_hash_func, string_compare_func);
|
||||
dns = set_new(&string_hash_ops);
|
||||
if (!dns)
|
||||
return -ENOMEM;
|
||||
|
||||
ntp = set_new(string_hash_func, string_compare_func);
|
||||
ntp = set_new(&string_hash_ops);
|
||||
if (!ntp)
|
||||
return -ENOMEM;
|
||||
|
||||
domains = set_new(string_hash_func, string_compare_func);
|
||||
domains = set_new(&string_hash_ops);
|
||||
if (!domains)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
@@ -63,15 +63,15 @@ static int network_load_one(Manager *manager, const char *filename) {
|
||||
LIST_HEAD_INIT(network->static_addresses);
|
||||
LIST_HEAD_INIT(network->static_routes);
|
||||
|
||||
network->stacked_netdevs = hashmap_new(string_hash_func, string_compare_func);
|
||||
network->stacked_netdevs = hashmap_new(&string_hash_ops);
|
||||
if (!network->stacked_netdevs)
|
||||
return log_oom();
|
||||
|
||||
network->addresses_by_section = hashmap_new(NULL, NULL);
|
||||
network->addresses_by_section = hashmap_new(NULL);
|
||||
if (!network->addresses_by_section)
|
||||
return log_oom();
|
||||
|
||||
network->routes_by_section = hashmap_new(NULL, NULL);
|
||||
network->routes_by_section = hashmap_new(NULL);
|
||||
if (!network->routes_by_section)
|
||||
return log_oom();
|
||||
|
||||
|
||||
@@ -34,12 +34,11 @@ int link_new(Manager *m, Link **ret, int ifindex, const char *ifname) {
|
||||
assert(m);
|
||||
assert(ifindex > 0);
|
||||
|
||||
r = hashmap_ensure_allocated(&m->links, NULL, NULL);
|
||||
r = hashmap_ensure_allocated(&m->links, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = hashmap_ensure_allocated(&m->links_by_name,
|
||||
string_hash_func, string_compare_func);
|
||||
r = hashmap_ensure_allocated(&m->links_by_name, &string_hash_ops);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user