summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Nault <g.nault@alphalink.fr>2013-02-11 21:01:03 +0100
committerKozlov Dmitry <xeb@mail.ru>2013-02-12 00:12:47 +0400
commit7c8c13572a5f7b6337edbb16a2f673a25f3de3f0 (patch)
treed17b6779cedfff31ba3d2bec7c0321ed8fc28f8d
parent468aabde54df4d500fdc4a2397499a14919ed98a (diff)
downloadaccel-ppp-7c8c13572a5f7b6337edbb16a2f673a25f3de3f0.tar.gz
accel-ppp-7c8c13572a5f7b6337edbb16a2f673a25f3de3f0.zip
l2tp: Support for freeing partially initialised tunnels
Avoid unregistering uninitialised tunnel data when freeing tunnel structures. This makes l2tp_tunnel_free() suitable for freeing partially initialised tunnels. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
-rw-r--r--accel-pppd/ctrl/l2tp/l2tp.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c
index 09334637..32af83c2 100644
--- a/accel-pppd/ctrl/l2tp/l2tp.c
+++ b/accel-pppd/ctrl/l2tp/l2tp.c
@@ -351,8 +351,11 @@ static void l2tp_tunnel_free(struct l2tp_conn_t *conn)
return;
}
- triton_md_unregister_handler(&conn->hnd);
- close(conn->hnd.fd);
+ if (conn->hnd.tpd)
+ triton_md_unregister_handler(&conn->hnd);
+
+ if (conn->hnd.fd >= 0)
+ close(conn->hnd.fd);
if (conn->timeout_timer.tpd)
triton_timer_del(&conn->timeout_timer);
@@ -370,7 +373,8 @@ static void l2tp_tunnel_free(struct l2tp_conn_t *conn)
if (conn->tunnel_fd != -1)
close(conn->tunnel_fd);
- triton_context_unregister(&conn->ctx);
+ if (conn->ctx.tpd)
+ triton_context_unregister(&conn->ctx);
while (!list_empty(&conn->send_queue)) {
pack = list_entry(conn->send_queue.next, typeof(*pack), entry);