Do send HEARTBEATs if there are new readers
The emphasis is on "do": with this commit it does it even when there is no data available in the writer. These were suppressed previously because of a quirk in the DDSI specification in versions prior to 2.3, where it impossible for a writer to send a valid heartbeat if its history cache was empty. Not sending them has negative consequences, as establishing a reliable connection then becomes dependent on the reader sending a pre-emptive ACKNACK message. Uusally, this makes no observable difference, but if the writer temporarily disconnects from the reader (but not vice-versa) it may require the publishing of a sample to resynchronize the two. Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
parent
dff08536c4
commit
5a4193ca37
1 changed files with 3 additions and 3 deletions
|
@ -3462,15 +3462,15 @@ seqno_t writer_max_drop_seq (const struct writer *wr)
|
|||
|
||||
int writer_must_have_hb_scheduled (const struct writer *wr, const struct whc_state *whcst)
|
||||
{
|
||||
if (ddsrt_avl_is_empty (&wr->readers) || whcst->max_seq < 0)
|
||||
if (ddsrt_avl_is_empty (&wr->readers))
|
||||
{
|
||||
/* Can't transmit a valid heartbeat if there is no data; and it
|
||||
wouldn't actually be sent anywhere if there are no readers, so
|
||||
there is little point in processing the xevent all the time.
|
||||
|
||||
Note that add_msg_to_whc and add_proxy_reader_to_writer will
|
||||
perform a reschedule. 8.4.2.2.3: need not (can't, really!) send
|
||||
a heartbeat if no data is available. */
|
||||
perform a reschedule. Since DDSI 2.3, we can send valid
|
||||
heartbeats in the absence of data. */
|
||||
return 0;
|
||||
}
|
||||
else if (!((const struct wr_prd_match *) ddsrt_avl_root_non_empty (&wr_readers_treedef, &wr->readers))->all_have_replied_to_hb)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue