diff options
author | Guillaume Nault <g.nault@alphalink.fr> | 2013-02-11 21:01:03 +0100 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2013-02-12 00:12:47 +0400 |
commit | 7c8c13572a5f7b6337edbb16a2f673a25f3de3f0 (patch) | |
tree | d17b6779cedfff31ba3d2bec7c0321ed8fc28f8d | |
parent | 468aabde54df4d500fdc4a2397499a14919ed98a (diff) | |
download | accel-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.c | 10 |
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); |