platform: drop lazy initialization _rules_init() of NMPRouteManager
Let's just always allocate the hash tables. We will likely need them,
and three hash tables are relatively cheap.
(cherry picked from commit 5b3e96451b
)
This commit is contained in:
@@ -23,10 +23,6 @@ struct _NMPRouteManager {
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void _rules_init(NMPRouteManager *self);
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
#define _NMLOG_DOMAIN LOGD_PLATFORM
|
#define _NMLOG_DOMAIN LOGD_PLATFORM
|
||||||
#define _NMLOG_PREFIX_NAME "route-manager"
|
#define _NMLOG_PREFIX_NAME "route-manager"
|
||||||
|
|
||||||
@@ -328,8 +324,6 @@ nmp_route_manager_track_rule(NMPRouteManager *self,
|
|||||||
g_return_if_fail(user_tag);
|
g_return_if_fail(user_tag);
|
||||||
nm_assert(track_priority != G_MININT32);
|
nm_assert(track_priority != G_MININT32);
|
||||||
|
|
||||||
_rules_init(self);
|
|
||||||
|
|
||||||
p_obj_stack = nmp_object_stackinit(&obj_stack, NMP_OBJECT_TYPE_ROUTING_RULE, routing_rule);
|
p_obj_stack = nmp_object_stackinit(&obj_stack, NMP_OBJECT_TYPE_ROUTING_RULE, routing_rule);
|
||||||
|
|
||||||
nm_assert(nmp_object_is_visible(p_obj_stack));
|
nm_assert(nmp_object_is_visible(p_obj_stack));
|
||||||
@@ -477,8 +471,6 @@ nmp_route_manager_untrack_rule(NMPRouteManager *self,
|
|||||||
g_return_if_fail(routing_rule);
|
g_return_if_fail(routing_rule);
|
||||||
g_return_if_fail(user_tag);
|
g_return_if_fail(user_tag);
|
||||||
|
|
||||||
_rules_init(self);
|
|
||||||
|
|
||||||
p_obj_stack = nmp_object_stackinit(&obj_stack, NMP_OBJECT_TYPE_ROUTING_RULE, routing_rule);
|
p_obj_stack = nmp_object_stackinit(&obj_stack, NMP_OBJECT_TYPE_ROUTING_RULE, routing_rule);
|
||||||
|
|
||||||
nm_assert(nmp_object_is_visible(p_obj_stack));
|
nm_assert(nmp_object_is_visible(p_obj_stack));
|
||||||
@@ -497,9 +489,6 @@ nmp_route_manager_set_dirty(NMPRouteManager *self, gconstpointer user_tag)
|
|||||||
g_return_if_fail(NMP_IS_ROUTE_MANAGER(self));
|
g_return_if_fail(NMP_IS_ROUTE_MANAGER(self));
|
||||||
g_return_if_fail(user_tag);
|
g_return_if_fail(user_tag);
|
||||||
|
|
||||||
if (!self->by_data)
|
|
||||||
return;
|
|
||||||
|
|
||||||
user_tag_data = g_hash_table_lookup(self->by_user_tag, &user_tag);
|
user_tag_data = g_hash_table_lookup(self->by_user_tag, &user_tag);
|
||||||
if (!user_tag_data)
|
if (!user_tag_data)
|
||||||
return;
|
return;
|
||||||
@@ -520,9 +509,6 @@ nmp_route_manager_untrack_all(NMPRouteManager *self,
|
|||||||
g_return_if_fail(NMP_IS_ROUTE_MANAGER(self));
|
g_return_if_fail(NMP_IS_ROUTE_MANAGER(self));
|
||||||
g_return_if_fail(user_tag);
|
g_return_if_fail(user_tag);
|
||||||
|
|
||||||
if (!self->by_data)
|
|
||||||
return;
|
|
||||||
|
|
||||||
user_tag_data = g_hash_table_lookup(self->by_user_tag, &user_tag);
|
user_tag_data = g_hash_table_lookup(self->by_user_tag, &user_tag);
|
||||||
if (!user_tag_data)
|
if (!user_tag_data)
|
||||||
return;
|
return;
|
||||||
@@ -552,9 +538,6 @@ nmp_route_manager_sync_rules(NMPRouteManager *self, gboolean keep_deleted_rules)
|
|||||||
|
|
||||||
g_return_if_fail(NMP_IS_ROUTE_MANAGER(self));
|
g_return_if_fail(NMP_IS_ROUTE_MANAGER(self));
|
||||||
|
|
||||||
if (!self->by_data)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_LOGD("sync%s", keep_deleted_rules ? " (don't remove any rules)" : "");
|
_LOGD("sync%s", keep_deleted_rules ? " (don't remove any rules)" : "");
|
||||||
|
|
||||||
pl_head_entry = nm_platform_lookup_obj_type(self->platform, NMP_OBJECT_TYPE_ROUTING_RULE);
|
pl_head_entry = nm_platform_lookup_obj_type(self->platform, NMP_OBJECT_TYPE_ROUTING_RULE);
|
||||||
@@ -750,22 +733,6 @@ nmp_route_manager_track_rule_default(NMPRouteManager *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_rules_init(NMPRouteManager *self)
|
|
||||||
{
|
|
||||||
if (self->by_data)
|
|
||||||
return;
|
|
||||||
|
|
||||||
self->by_data =
|
|
||||||
g_hash_table_new_full(_rules_data_hash, _rules_data_equal, NULL, _rules_data_destroy);
|
|
||||||
self->by_obj =
|
|
||||||
g_hash_table_new_full(_rules_obj_hash, _rules_obj_equal, NULL, _rules_obj_destroy);
|
|
||||||
self->by_user_tag = g_hash_table_new_full(_rules_user_tag_hash,
|
|
||||||
_rules_user_tag_equal,
|
|
||||||
NULL,
|
|
||||||
_rules_user_tag_destroy);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
NMPRouteManager *
|
NMPRouteManager *
|
||||||
@@ -779,6 +746,14 @@ nmp_route_manager_new(NMPlatform *platform)
|
|||||||
*self = (NMPRouteManager){
|
*self = (NMPRouteManager){
|
||||||
.ref_count = 1,
|
.ref_count = 1,
|
||||||
.platform = g_object_ref(platform),
|
.platform = g_object_ref(platform),
|
||||||
|
.by_data =
|
||||||
|
g_hash_table_new_full(_rules_data_hash, _rules_data_equal, NULL, _rules_data_destroy),
|
||||||
|
.by_obj =
|
||||||
|
g_hash_table_new_full(_rules_obj_hash, _rules_obj_equal, NULL, _rules_obj_destroy),
|
||||||
|
.by_user_tag = g_hash_table_new_full(_rules_user_tag_hash,
|
||||||
|
_rules_user_tag_equal,
|
||||||
|
NULL,
|
||||||
|
_rules_user_tag_destroy),
|
||||||
};
|
};
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -799,11 +774,9 @@ nmp_route_manager_unref(NMPRouteManager *self)
|
|||||||
if (--self->ref_count > 0)
|
if (--self->ref_count > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (self->by_data) {
|
|
||||||
g_hash_table_destroy(self->by_user_tag);
|
g_hash_table_destroy(self->by_user_tag);
|
||||||
g_hash_table_destroy(self->by_obj);
|
g_hash_table_destroy(self->by_obj);
|
||||||
g_hash_table_destroy(self->by_data);
|
g_hash_table_destroy(self->by_data);
|
||||||
}
|
|
||||||
g_object_unref(self->platform);
|
g_object_unref(self->platform);
|
||||||
g_slice_free(NMPRouteManager, self);
|
g_slice_free(NMPRouteManager, self);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user