interface_update_complete(state->proto.iface);
- if (!keep)
- state->proto.proto_event(&state->proto, IFPEV_UP);
- state->sm = S_IDLE;
+ if ((state->sm != S_SETUP_ABORT) && (state->sm != S_TEARDOWN)) {
+ if (!keep)
+ state->proto.proto_event(&state->proto, IFPEV_UP);
+ state->sm = S_IDLE;
+ }
return 0;
}
signal = SIGTERM;
if (state->proto_task.uloop.pending) {
- if (signal == SIGTERM)
+ if (signal == SIGTERM || signal == SIGKILL)
state->proto_task_killed = true;
kill(state->proto_task.uloop.pid, signal);
}