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.
diff --git a/include/proto/connection.h b/include/proto/connection.h
index 37af379..ff63e03 100644
--- a/include/proto/connection.h
+++ b/include/proto/connection.h
@@ -45,11 +45,16 @@
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 <c>'s file descriptor depending on its current