aboutsummaryrefslogtreecommitdiffstats
path: root/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2011-07-06 12:49:54 +0200
committerTobias Brunner <tobias@strongswan.org>2011-07-06 12:49:54 +0200
commit4e9e4372f51aaf9cc9b0414bd4e4578fba66d463 (patch)
tree8129dd368afeb227eaa8d8da5ccb754dc92b6c6d /src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
parent0c2ce1905a5e53b7fb2010b843ddc8848084f61a (diff)
downloadstrongswan-4e9e4372f51aaf9cc9b0414bd4e4578fba66d463.tar.bz2
strongswan-4e9e4372f51aaf9cc9b0414bd4e4578fba66d463.tar.xz
Simplified destruction of policy_sa_t objects in Netlink interface.
Diffstat (limited to 'src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c')
-rw-r--r--src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
index 24e732aa0..a1c0d8407 100644
--- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
+++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
@@ -491,10 +491,10 @@ static policy_sa_t *policy_sa_create(private_kernel_netlink_ipsec_t *this,
/**
* Destroy a policy_sa(_fwd)_t object
*/
-static void policy_sa_destroy(private_kernel_netlink_ipsec_t *this,
- policy_dir_t dir, policy_sa_t *policy)
+static void policy_sa_destroy(policy_sa_t *policy, policy_dir_t *dir,
+ private_kernel_netlink_ipsec_t *this)
{
- if (dir == POLICY_FWD)
+ if (*dir == POLICY_FWD)
{
policy_sa_fwd_t *fwd = (policy_sa_fwd_t*)policy;
fwd->src_ts->destroy(fwd->src_ts);
@@ -539,14 +539,9 @@ static void policy_entry_destroy(private_kernel_netlink_ipsec_t *this,
}
if (policy->used_by)
{
- enumerator_t *enumerator;
- policy_sa_t *sa;
- enumerator = policy->used_by->create_enumerator(policy->used_by);
- while (enumerator->enumerate(enumerator, (void**)&sa))
- {
- policy_sa_destroy(this, policy->direction, sa);
- }
- enumerator->destroy(enumerator);
+ policy->used_by->invoke_function(policy->used_by,
+ (linked_list_invoke_t)policy_sa_destroy,
+ &policy->direction, this);
policy->used_by->destroy(policy->used_by);
}
free(policy);
@@ -2411,7 +2406,7 @@ METHOD(kernel_ipsec_t, del_policy, status_t,
if (reqid == mapping->sa->cfg.reqid)
{
current->used_by->remove_at(current->used_by, enumerator);
- policy_sa_destroy(this, direction, mapping);
+ policy_sa_destroy(mapping, &direction, this);
break;
}
is_installed = FALSE;