From: Willy Tarreau Date: Mon, 21 May 2012 15:28:50 +0000 (+0200) Subject: MINOR: stream_interface: add a data channel close function X-Git-Tag: v1.5-dev12~173 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=24208275d533293c648dec2baf70ce93290836d9;p=thirdparty%2Fhaproxy.git MINOR: stream_interface: add a data channel close function This function will be called later when splitting the shutdown in two steps. It will be needed by SSL and for remote socket operations to release unused contexts. --- diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index 632300a9ec..efdb1c48b1 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -189,6 +189,13 @@ static inline int si_connect(struct stream_interface *si) return si_ctrl(si)->connect(si); } +/* Calls the close() function of the data layer if any */ +static inline void si_data_close(struct stream_interface *si) +{ + if (si->conn.data->close) + si->conn.data->close(&si->conn); +} + #endif /* _PROTO_STREAM_INTERFACE_H */ /* diff --git a/include/types/stream_interface.h b/include/types/stream_interface.h index 2afefb5ebd..8e9e64b118 100644 --- a/include/types/stream_interface.h +++ b/include/types/stream_interface.h @@ -132,7 +132,9 @@ struct sock_ops { void (*chk_rcv)(struct stream_interface *); /* chk_rcv function */ void (*chk_snd)(struct stream_interface *); /* chk_snd function */ int (*read)(int fd); /* read callback after poll() */ - int (*write)(int fd); /* wrtie callback after poll() */ + int (*write)(int fd); /* write callback after poll() */ + void (*close)(struct connection *); /* close the data channel on the connection */ + }; /* A stream interface has 3 parts : diff --git a/src/sock_raw.c b/src/sock_raw.c index 1205b2e49b..213d46972c 100644 --- a/src/sock_raw.c +++ b/src/sock_raw.c @@ -1088,6 +1088,7 @@ struct sock_ops sock_raw = { .chk_snd = sock_raw_chk_snd, .read = sock_raw_read, .write = sock_raw_write, + .close = NULL, }; /* diff --git a/src/stream_interface.c b/src/stream_interface.c index 1005eafa16..c2f7b94f49 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -49,6 +49,7 @@ struct sock_ops stream_int_embedded = { .chk_snd = stream_int_chk_snd, .read = NULL, .write = NULL, + .close = NULL, }; /* socket operations for external tasks */ @@ -60,6 +61,7 @@ struct sock_ops stream_int_task = { .chk_snd = stream_int_chk_snd, .read = NULL, .write = NULL, + .close = NULL, }; /*