From: Willy Tarreau Date: Wed, 7 Nov 2018 10:28:12 +0000 (+0100) Subject: MINOR: stream-int: make it clear that si_ops cannot be null X-Git-Tag: v1.9-dev6~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57f08bb63b6bd79a1d3e46880c65cffa67a9a260;p=thirdparty%2Fhaproxy.git MINOR: stream-int: make it clear that si_ops cannot be null There was an ambiguity in which functions of the si_ops struct could be null or not. only ->update doesn't exist in one of the si_ops (the embedded one), all others are always defined. ->shutr and ->shutw were never tested. However ->chk_rcv() and ->chk_snd() were tested, causing confusion about the proper way to wake the other side up if undefined (which never happens). Let's update the comments to state these functions are mandatory and remove the offending checks. --- diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index c2c5310dcb..7bab7ffd04 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -388,15 +388,13 @@ static inline void si_update(struct stream_interface *si) /* Calls chk_rcv on the connection using the data layer */ static inline void si_chk_rcv(struct stream_interface *si) { - if (si->ops->chk_rcv) - si->ops->chk_rcv(si); + si->ops->chk_rcv(si); } /* Calls chk_snd on the connection using the data layer */ static inline void si_chk_snd(struct stream_interface *si) { - if (si->ops->chk_snd) - si->ops->chk_snd(si); + si->ops->chk_snd(si); } /* Calls chk_snd on the connection using the ctrl layer */ diff --git a/include/types/stream_interface.h b/include/types/stream_interface.h index 3a9895e60f..0362afdf58 100644 --- a/include/types/stream_interface.h +++ b/include/types/stream_interface.h @@ -106,11 +106,11 @@ struct stream_interface { /* operations available on a stream-interface */ struct si_ops { - void (*update)(struct stream_interface *); /* I/O update function */ - void (*chk_rcv)(struct stream_interface *); /* chk_rcv function */ - void (*chk_snd)(struct stream_interface *); /* chk_snd function */ - void (*shutr)(struct stream_interface *); /* shut read function */ - void (*shutw)(struct stream_interface *); /* shut write function */ + void (*update)(struct stream_interface *); /* I/O update function, may be null */ + void (*chk_rcv)(struct stream_interface *); /* chk_rcv function, may not be null */ + void (*chk_snd)(struct stream_interface *); /* chk_snd function, may not be null */ + void (*shutr)(struct stream_interface *); /* shut read function, may not be null */ + void (*shutw)(struct stream_interface *); /* shut write function, may not be null */ }; #endif /* _TYPES_STREAM_INTERFACE_H */