Skip to content

Best-effort delivery drops the dispose notification

Rule 34 · applies to the publisher · Back to all rules

Breaks a guarantee. The unregister or dispose message can be lost, so the reader never learns the instance was disposed.

If you set Writer autodispose_unregistered_instances = true together with Reliability = BEST_EFFORT
Breaks a guarantee

Example

A best-effort writer disposes an instance on shutdown, but the dispose packet is lost and the reader keeps the instance alive.

How to fix it

Use RELIABLE when auto-dispose lifecycle notifications must be delivered.

Why this rule is flagged

What the DDS specification says

The DDS specification does not settle this case on its own, so the rule rests on direct measurement.


What the engine source code shows

The behavior here does not depend on a specific engine's implementation, so the rule follows from the measurements.


What the measurements show

Item Value
Dataset Download CSV
Fixed QoS setting None
Tested variable RELIAB.kind, WDLIFE.autodispose_unregistered_instances
Tested values RELIAB ∈ {BEST_EFFORT, RELIABLE}, autodispose ∈ {true, false}
Rule-relevant case autodispose = true, RELIAB = BEST_EFFORT
Tested engines / versions Fast DDS 2.14.6 (Jazzy), Cyclone DDS 0.10.5
Network setting RTT ∈ {1 ms, 50 ms}, loss ∈ {0%, 5%, 10%, 20%}, PP = 50 ms, message size = 1024 B

Measurement result

Rule 34 CycloneDDS heatmap Rule 34 FastDDS heatmap

The heatmaps show the observed disposed rate for autodispose = true; Cyclone DDS preserved the disposed observation across tested loss levels, while Fast DDS showed lower disposed observation rates under higher loss.