MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / unregister_was_received

Method unregister_was_received

dds/DCPS/InstanceState.cpp:145–176  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

143}
144
145bool 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
178void InstanceState::schedule_pending()
179{

Callers 1

Calls 6

LogGuidFunction · 0.85
ownership_managerMethod · 0.80
eraseMethod · 0.45
lockMethod · 0.45
remove_writerMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected