From 57f08bb63b6bd79a1d3e46880c65cffa67a9a260 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 7 Nov 2018 11:28:12 +0100 Subject: [PATCH] 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. --- include/proto/stream_interface.h | 6 ++---- include/types/stream_interface.h | 10 +++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index c2c5310dc..7bab7ffd0 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 3a9895e60..0362afdf5 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 */