From 71803e7eda63162a99f2d2e8a1eeeadc89c9b4e7 Mon Sep 17 00:00:00 2001 From: Kozlov Dmitry Date: Thu, 9 Dec 2010 13:48:39 +0300 Subject: ppp: fixed session hangup if lcp phase was not performed --- accel-pptpd/ppp/ppp_lcp.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'accel-pptpd/ppp') diff --git a/accel-pptpd/ppp/ppp_lcp.c b/accel-pptpd/ppp/ppp_lcp.c index e8eba29e..334f6c88 100644 --- a/accel-pptpd/ppp/ppp_lcp.c +++ b/accel-pptpd/ppp/ppp_lcp.c @@ -120,15 +120,22 @@ int lcp_layer_start(struct ppp_layer_data_t *ld) return 0; } +static void _lcp_layer_finished(struct ppp_lcp_t *lcp) +{ + ppp_layer_finished(lcp->ppp, &lcp->ld); +} + void lcp_layer_finish(struct ppp_layer_data_t *ld) { struct ppp_lcp_t *lcp = container_of(ld,typeof(*lcp),ld); log_ppp_debug("lcp_layer_finish\n"); - stop_echo(lcp); - - ppp_fsm_close(&lcp->fsm); + if (lcp->started) { + stop_echo(lcp); + ppp_fsm_close(&lcp->fsm); + } else + triton_context_call(lcp->ppp->ctrl->ctx, (triton_event_func)_lcp_layer_finished, lcp); } void lcp_layer_free(struct ppp_layer_data_t *ld) -- cgit v1.2.3