BUG FIX: Livelock in rtps_writer when PUSH_MODE=FALSE & DURABILITY=TRANSIENT_LOCAL

A Flag was not reset in a sub-branch that is taken when PUSH_MODE=FALSE
& DURABILITY=TRANSIENT_LOCAL, that prevented the RTPS writer from ever
sending HEARTBEATs.
This commit is contained in:
Greek 2022-01-29 13:31:21 +01:00 committed by Greek64
parent a2e00cf0f5
commit fcbb6f12f5
2 changed files with 7 additions and 1 deletions

View File

@ -100,6 +100,7 @@
ros2 run rosidl_adapter srv2idl.py *.srv ros2 run rosidl_adapter srv2idl.py *.srv
* The publication_handle of the DDS Specification (e.g. the one returned in the Sample Info) is an implementation specific ID that can identify local and remote DDS Entities LOCALY. * The publication_handle of the DDS Specification (e.g. the one returned in the Sample Info) is an implementation specific ID that can identify local and remote DDS Entities LOCALY.
* Testbench did not catch Bug, where the Pub ACKNACK was sent to as Sub ACKNACK (ACKNACK Destinations were flipped). Extend testbench to catch this case. * Testbench did not catch Bug, where the Pub ACKNACK was sent to as Sub ACKNACK (ACKNACK Destinations were flipped). Extend testbench to catch this case.
* Testbench did not catch rtps_writer not sending HEARTBEATS if PUSH_MODE=FALSE & DURABILITY=TRANSIENT_LOCAL
* Fast-RTPS does not follow DDSI-RTPS Specification * Fast-RTPS does not follow DDSI-RTPS Specification
- Open Github Issue - Open Github Issue

View File

@ -1767,6 +1767,8 @@ begin
if (ack_hc = '1') then if (ack_hc = '1') then
-- End of Historical Data -- End of Historical Data
if (next_seq_nr = last_seq_nr) then if (next_seq_nr = last_seq_nr) then
-- Reset
historical_push_next <= '0';
-- DONE -- DONE
stage_next <= IDLE; stage_next <= IDLE;
else else
@ -1777,7 +1779,8 @@ begin
when 4 => -- Use same "start" sub-state in both versions when 4 => -- Use same "start" sub-state in both versions
-- No Cache Changes Available -- No Cache Changes Available
if (min_sn = SEQUENCENUMBER_UNKNOWN) then if (min_sn = SEQUENCENUMBER_UNKNOWN) then
-- Reset
historical_push_next <= '0';
-- DONE -- DONE
stage_next <= IDLE; stage_next <= IDLE;
else else
@ -1786,6 +1789,8 @@ begin
if (reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') then if (reader_flags(READER_IS_BEST_EFFORT_FLAG) = '0') then
cnt_next <= 0; cnt_next <= 0;
else else
-- Reset
historical_push_next <= '0';
-- DONE -- DONE
stage_next <= IDLE; stage_next <= IDLE;
end if; end if;