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.kaiwu.me/postgresql/log/contrib/postgres_fdw/postgres_fdw.c?a=commitdiff_plain;h=24208275d533293c648dec2baf70ce93290836d9;p=haproxy.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 632300a9e..efdb1c48b 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 2afefb5eb..8e9e64b11 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 1205b2e49..213d46972 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 1005eafa1..c2f7b94f4 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, }; /*