Skip to content

Commit a85f73f

Browse files
committed
network/network: use hash_ops with destructor for managing Network objects
1 parent 09ddaf2 commit a85f73f

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

src/network/networkd-manager.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ Manager* manager_free(Manager *m) {
680680
m->links_by_index = hashmap_free_with_destructor(m->links_by_index, link_unref);
681681

682682
m->dhcp_pd_subnet_ids = set_free(m->dhcp_pd_subnet_ids);
683-
m->networks = ordered_hashmap_free_with_destructor(m->networks, network_unref);
683+
m->networks = ordered_hashmap_free(m->networks);
684684

685685
/* The same object may be registered with multiple names, and netdev_detach() may drop multiple
686686
* entries. Hence, hashmap_free_with_destructor() cannot be used. */

src/network/networkd-network.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444
#include "strv.h"
4545
#include "tclass.h"
4646

47+
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
48+
network_hash_ops,
49+
char, string_hash_func, string_compare_func,
50+
Network, network_unref);
51+
4752
DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(
4853
stacked_netdevs_hash_ops,
4954
char, string_hash_func, string_compare_func,
@@ -599,7 +604,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
599604
if (r < 0)
600605
return r; /* network_verify() logs internally. */
601606

602-
r = ordered_hashmap_ensure_put(networks, &string_hash_ops, network->name, network);
607+
r = ordered_hashmap_ensure_put(networks, &network_hash_ops, network->name, network);
603608
if (r < 0)
604609
return log_warning_errno(r, "%s: Failed to store configuration into hashmap: %m", filename);
605610

@@ -650,15 +655,15 @@ static bool network_netdev_equal(Network *a, Network *b) {
650655
}
651656

652657
int network_reload(Manager *manager) {
653-
OrderedHashmap *new_networks = NULL;
658+
_cleanup_ordered_hashmap_free_ OrderedHashmap *new_networks = NULL;
654659
Network *n, *old;
655660
int r;
656661

657662
assert(manager);
658663

659664
r = network_load(manager, &new_networks);
660665
if (r < 0)
661-
goto failure;
666+
return r;
662667

663668
ORDERED_HASHMAP_FOREACH(n, new_networks) {
664669
r = network_get_by_name(manager, n->name, &old);
@@ -680,14 +685,13 @@ int network_reload(Manager *manager) {
680685
/* Nothing updated, use the existing Network object, and drop the new one. */
681686
r = ordered_hashmap_replace(new_networks, old->name, old);
682687
if (r < 0)
683-
goto failure;
688+
return r;
684689

685690
network_ref(old);
686691
network_unref(n);
687692
}
688693

689-
ordered_hashmap_free_with_destructor(manager->networks, network_unref);
690-
manager->networks = new_networks;
694+
ordered_hashmap_free_and_replace(manager->networks, new_networks);
691695

692696
r = manager_build_dhcp_pd_subnet_ids(manager);
693697
if (r < 0)
@@ -698,11 +702,6 @@ int network_reload(Manager *manager) {
698702
return r;
699703

700704
return 0;
701-
702-
failure:
703-
ordered_hashmap_free_with_destructor(new_networks, network_unref);
704-
705-
return r;
706705
}
707706

708707
int manager_build_dhcp_pd_subnet_ids(Manager *manager) {

0 commit comments

Comments
 (0)