Maintaining the reqid when recreating a CHILD_SA from scratch night not
strictly be necessary as we usually don't have to replace any temporary
states in the kernel. However, there could be concurrent acquires that
might actually make it necessary (we use the reqid to keep track of
acquires and it's also part of the duplicate check).
if (action & ACTION_START)
{
child_init_args_t args = {
- .reqid = child_sa->get_reqid(child_sa),
+ .reqid = child_sa->get_reqid_ref(child_sa),
.label = child_sa->get_label(child_sa),
};
child_cfg = child_sa->get_config(child_sa);
other->task_manager->queue_child(other->task_manager,
child_cfg->get_ref(child_cfg),
&args);
+ if (args.reqid)
+ {
+ charon->kernel->release_reqid(charon->kernel, args.reqid);
+ }
}
}
enumerator->destroy(enumerator);