Deactivate all active segments before shutting down

This commit is contained in:
Martin Willi
2010-04-07 13:55:14 +02:00
committed by Martin Willi
parent 4e248733a8
commit 310498f3de
3 changed files with 30 additions and 0 deletions
@@ -264,6 +264,27 @@ static void resync(private_ha_sync_segments_t *this, u_int segment)
list->destroy(list);
}
/**
* Implementation of listener_t.alert
*/
static bool alert_hook(private_ha_sync_segments_t *this, ike_sa_t *ike_sa,
alert_t alert, va_list args)
{
if (alert == ALERT_SHUTDOWN_SIGNAL)
{
int i;
for (i = 0; i < SEGMENTS_MAX; i++)
{
if (this->active & SEGMENTS_BIT(i))
{
deactivate(this, i, TRUE);
}
}
}
return TRUE;
}
/**
* Implementation of ha_sync_segments_t.destroy.
*/
@@ -282,6 +303,8 @@ ha_sync_segments_t *ha_sync_segments_create(ha_sync_socket_t *socket,
{
private_ha_sync_segments_t *this = malloc_thing(private_ha_sync_segments_t);
memset(&this->public.listener, 0, sizeof(listener_t));
this->public.listener.alert = (bool(*)(listener_t*, ike_sa_t *, alert_t, va_list))alert_hook;
this->public.activate = (void(*)(ha_sync_segments_t*, u_int segment,bool))activate;
this->public.deactivate = (void(*)(ha_sync_segments_t*, u_int segment,bool))deactivate;
this->public.resync = (void(*)(ha_sync_segments_t*, u_int segment))resync;