summaryrefslogtreecommitdiff
path: root/accel-pppd/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'accel-pppd/session.c')
-rw-r--r--accel-pppd/session.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/accel-pppd/session.c b/accel-pppd/session.c
index da18e434..247c0d77 100644
--- a/accel-pppd/session.c
+++ b/accel-pppd/session.c
@@ -173,6 +173,13 @@ void __export ap_session_finished(struct ap_session *ses)
{
ses->terminated = 1;
+ if (!ses->down) {
+ ap_session_ifdown(ses);
+ ap_session_read_stats(ses, NULL);
+
+ triton_event_fire(EV_SES_FINISHING, ses);
+ }
+
triton_event_fire(EV_SES_PRE_FINISHED, ses);
pthread_rwlock_wrlock(&ses_lock);
@@ -275,12 +282,14 @@ void __export ap_session_terminate(struct ap_session *ses, int cause, int hard)
log_ppp_debug("terminate\n");
- ap_session_ifdown(ses);
- ap_session_read_stats(ses, NULL);
+ if (ses->ctrl->terminate(ses, hard)) {
+ ap_session_ifdown(ses);
+ ap_session_read_stats(ses, NULL);
- triton_event_fire(EV_SES_FINISHING, ses);
+ triton_event_fire(EV_SES_FINISHING, ses);
- ses->ctrl->terminate(ses, hard);
+ ses->down = 1;
+ }
}
void ap_shutdown_soft(void (*cb)(void))