Your statement is not completely correct. In case of EXCLUSIVE ownership, an instance can be resurrected by the dataWriter that is the owner of the instance. So I think your questions can be answered by explaining how ownership of an instance is managed. The spec states: The owner is always set to be the highest-strength DataWriter object among the ones currently “active” (as determined by the LIVELINESS QoS). So for any instance, the active dataWriter with the highest strength in the system that is active for an instance is the owner and can resurrect any instance. A writer is 'active for an instance' if it has registered that instance, either explicitly with the register_instance() method or implicitly by writing data Ownership can be transferred from one writer to another by the following events:
* A new writer with a higher STRENGTH value becomes active for the instance. This new writer then becomes the owner. * An existing writer is active for an instance and changes its STRENGTH policy value to a value higher than the current owner. This changed writer then becomes the owner. * The current owner unregisters the instance (becomes unactive for the instance). The writer (if any available) that is active for the instance and that has the highest STRENGTH value in the system becomes owner. Unregistering can happen either explicitly with the unregister_instance() method, or implicity when the dataWriter is deleted or implicitly when the writer does not assert its liveliness in time.
With the last bullet, your question b) has been answered as well. A writer that dies, does not assert its liveliness in time and loses ownership over all instances it owns. Ownership is transferred to another writer, which can resurrect the instance.