| 143 | } |
| 144 | |
| 145 | bool InstanceState::unregister_was_received(const GUID_t& writer_id) |
| 146 | { |
| 147 | if (DCPS_debug_level > 1) { |
| 148 | ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) InstanceState::unregister_was_received on %C\n"), |
| 149 | LogGuid(writer_id).c_str() |
| 150 | )); |
| 151 | } |
| 152 | |
| 153 | ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, false); |
| 154 | writers_.erase(writer_id); |
| 155 | #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE |
| 156 | if (exclusive_) { |
| 157 | // If unregistered by owner then the ownership should be transferred to another |
| 158 | // writer. |
| 159 | RcHandle<DataReaderImpl> reader = reader_.lock(); |
| 160 | if (reader) { |
| 161 | DataReaderImpl::OwnershipManagerPtr owner_manager = reader->ownership_manager(); |
| 162 | if (owner_manager) |
| 163 | owner_manager->remove_writer (handle_, writer_id); |
| 164 | } |
| 165 | } |
| 166 | #endif |
| 167 | |
| 168 | if (writers_.empty() && (instance_state_ & DDS::ALIVE_INSTANCE_STATE)) { |
| 169 | instance_state_ = DDS::NOT_ALIVE_NO_WRITERS_INSTANCE_STATE; |
| 170 | state_updated(); |
| 171 | schedule_release(); |
| 172 | return true; |
| 173 | } |
| 174 | |
| 175 | return false; |
| 176 | } |
| 177 | |
| 178 | void InstanceState::schedule_pending() |
| 179 | { |
no test coverage detected