swim: do not rebuild packet meta multiple times
Before the patch there were 2 cases when an unchanged packet was rebuilt partially on each send: - cached round message's meta section was rebuilt on each EV_WRITE event in swim_scheduler_on_output() function; - broadcast message's meta section was rebuilt too even though its content does not depend on a broadcast interface. The third case appears with indirect pings patch which aggravates meta building business by routing and packet forwarding. When a packet needs to be forwarded farther, its meta is built in a special manner preserving the route before EV_WRITE appears, and on_output should not touch that meta. This patch adds a check preventing unnecessary meta rebuilds. Besides, the check and the meta building code are moved into a dedicated function out of swim_scheduler_on_output() - it allows to completely split logic of packing a message and sending it. Separated logic helps a lot when indirect pings are introduced. Part of #3234
Please register or sign in to comment