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

Method wait

dds/DCPS/WaitSet.cpp:112–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

110}
111
112ReturnCode_t WaitSet::wait(ConditionSeq& active_conditions,
113 const Duration_t& timeout)
114{
115 using namespace OpenDDS::DCPS;
116
117 if (!non_negative_duration(timeout)) {
118 return DDS::RETCODE_BAD_PARAMETER;
119 }
120
121 MonotonicTimePoint deadline;
122 const bool use_deadline = !is_infinite(timeout);
123 if (use_deadline) {
124 deadline = MonotonicTimePoint::now() + TimeDuration(timeout);
125 }
126
127 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, g, lock_,
128 RETCODE_OUT_OF_RESOURCES);
129
130 if (waiting_) {
131 return RETCODE_PRECONDITION_NOT_MET;
132 }
133
134 waiting_ = true;
135 signaled_conditions_.clear();
136
137 for (ConditionSet::const_iterator iter = attached_conditions_.begin(),
138 end = attached_conditions_.end(); iter != end; ++iter) {
139 if ((*iter)->get_trigger_value()) {
140 signaled_conditions_.insert(*iter);
141 }
142 }
143
144 CvStatus status = CvStatus_NoTimeout;
145 ThreadStatusManager& thread_status_manager = TheServiceParticipant->get_thread_status_manager();
146 while ((attached_conditions_.empty() || signaled_conditions_.empty()) &&
147 status == CvStatus_NoTimeout) {
148 status = use_deadline ? cond_.wait_until(deadline, thread_status_manager) : cond_.wait(thread_status_manager);
149 }
150
151 copyInto(active_conditions, signaled_conditions_);
152 signaled_conditions_.clear();
153 waiting_ = false;
154
155 switch (status) {
156 case CvStatus_NoTimeout:
157 return RETCODE_OK;
158
159 case CvStatus_Timeout:
160 return RETCODE_TIMEOUT;
161
162 case CvStatus_Error:
163 default:
164 if (DCPS_debug_level) {
165 ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: WaitSet::wait: wait_until failed\n"));
166 }
167 return RETCODE_ERROR;
168 }
169}

Callers 15

mainMethod · 0.95
waitForSampleMethod · 0.95
mainMethod · 0.95
mainMethod · 0.95
mainMethod · 0.95
mainMethod · 0.95
callMethod · 0.95
mainMethod · 0.95
mainMethod · 0.95
ACE_TMAINFunction · 0.45
ACE_TMAINFunction · 0.45
ACE_TMAINFunction · 0.45

Calls 8

copyIntoFunction · 0.85
clearMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
get_trigger_valueMethod · 0.45
insertMethod · 0.45
emptyMethod · 0.45
wait_untilMethod · 0.45

Tested by 9

mainMethod · 0.76
waitForSampleMethod · 0.76
mainMethod · 0.76
mainMethod · 0.76
mainMethod · 0.76
mainMethod · 0.76
callMethod · 0.76
mainMethod · 0.76
mainMethod · 0.76