From 6c03a649780157542f0e6371c0f5a41b01b3ad06 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 12 Oct 2012 17:00:05 +0200 Subject: [PATCH] MEDIUM: connection: always unset the transport layer upon close When calling conn_xprt_close(), we always clear the transport pointer so that all transport layers leave the connection in the same state after a close. This will also make it safer and cheaper to call conn_xprt_close() multiple times if needed. --- include/proto/connection.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/include/proto/connection.h b/include/proto/connection.h index 37af37968..ff63e03cc 100644 --- a/include/proto/connection.h +++ b/include/proto/connection.h @@ -45,11 +45,16 @@ static inline int conn_xprt_init(struct connection *conn) return 0; } -/* Calls the close() function of the transport layer if any */ +/* Calls the close() function of the transport layer if any, and always unsets + * the transport layer. + */ static inline void conn_xprt_close(struct connection *conn) { - if (conn->xprt && conn->xprt->close) - conn->xprt->close(conn); + if (conn->xprt) { + if (conn->xprt->close) + conn->xprt->close(conn); + conn->xprt = NULL; + } } /* Update polling on connection 's file descriptor depending on its current