Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: webrtc/system_wrappers/source/condition_variable_event_win.cc

Issue 1601523009: Remove ConditionVariableWrapper. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Move include inside guard Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 Source: 2 Source:
3 http://www1.cse.wustl.edu/~schmidt/ACE-copying.html 3 http://www1.cse.wustl.edu/~schmidt/ACE-copying.html
4 4
5 License: 5 License:
6 Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), 6 Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM),
7 and CoSMIC(TM) 7 and CoSMIC(TM)
8 8
9 ACE(TM), TAO(TM), CIAO(TM), DAnCE>(TM), and CoSMIC(TM) (henceforth referred to 9 ACE(TM), TAO(TM), CIAO(TM), DAnCE>(TM), and CoSMIC(TM) (henceforth referred to
10 as "DOC software") are copyrighted by Douglas C. Schmidt and his research 10 as "DOC software") are copyrighted by Douglas C. Schmidt and his research
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 } 111 }
112 112
113 ConditionVariableEventWin::~ConditionVariableEventWin() { 113 ConditionVariableEventWin::~ConditionVariableEventWin() {
114 CloseHandle(events_[WAKE]); 114 CloseHandle(events_[WAKE]);
115 CloseHandle(events_[WAKEALL_1]); 115 CloseHandle(events_[WAKEALL_1]);
116 CloseHandle(events_[WAKEALL_0]); 116 CloseHandle(events_[WAKEALL_0]);
117 117
118 DeleteCriticalSection(&num_waiters_crit_sect_); 118 DeleteCriticalSection(&num_waiters_crit_sect_);
119 } 119 }
120 120
121 void ConditionVariableEventWin::SleepCS(CriticalSectionWrapper& crit_sect) { 121 void ConditionVariableEventWin::SleepCS(CRITICAL_SECTION* crit_sect) {
122 SleepCS(crit_sect, INFINITE); 122 SleepCS(crit_sect, INFINITE);
123 } 123 }
124 124
125 bool ConditionVariableEventWin::SleepCS(CriticalSectionWrapper& crit_sect, 125 bool ConditionVariableEventWin::SleepCS(CRITICAL_SECTION* crit_sect,
126 unsigned long max_time_in_ms) { 126 unsigned long max_time_in_ms) {
127 EnterCriticalSection(&num_waiters_crit_sect_); 127 EnterCriticalSection(&num_waiters_crit_sect_);
128 128
129 // Get the eventID for the event that will be triggered by next 129 // Get the eventID for the event that will be triggered by next
130 // WakeAll() call and start waiting for it. 130 // WakeAll() call and start waiting for it.
131 const EventWakeUpType eventID = 131 const EventWakeUpType eventID =
132 (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0; 132 (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0;
133 133
134 ++(num_waiters_[eventID]); 134 ++(num_waiters_[eventID]);
135 LeaveCriticalSection(&num_waiters_crit_sect_); 135 LeaveCriticalSection(&num_waiters_crit_sect_);
136 136
137 LeaveCriticalSection(&crit_sect.crit_); 137 LeaveCriticalSection(crit_sect);
138 HANDLE events[2]; 138 HANDLE events[2];
139 events[0] = events_[WAKE]; 139 events[0] = events_[WAKE];
140 events[1] = events_[eventID]; 140 events[1] = events_[eventID];
141 const DWORD result = WaitForMultipleObjects(2, // Wait on 2 events. 141 const DWORD result = WaitForMultipleObjects(2, // Wait on 2 events.
142 events, 142 events,
143 FALSE, // Wait for either. 143 FALSE, // Wait for either.
144 max_time_in_ms); 144 max_time_in_ms);
145 145
146 const bool ret_val = (result != WAIT_TIMEOUT); 146 const bool ret_val = (result != WAIT_TIMEOUT);
147 147
148 EnterCriticalSection(&num_waiters_crit_sect_); 148 EnterCriticalSection(&num_waiters_crit_sect_);
149 --(num_waiters_[eventID]); 149 --(num_waiters_[eventID]);
150 150
151 // Last waiter should only be true for WakeAll(). WakeAll() correspond 151 // Last waiter should only be true for WakeAll(). WakeAll() correspond
152 // to position 1 in events[] -> (result == WAIT_OBJECT_0 + 1) 152 // to position 1 in events[] -> (result == WAIT_OBJECT_0 + 1)
153 const bool last_waiter = (result == WAIT_OBJECT_0 + 1) && 153 const bool last_waiter = (result == WAIT_OBJECT_0 + 1) &&
154 (num_waiters_[eventID] == 0); 154 (num_waiters_[eventID] == 0);
155 LeaveCriticalSection(&num_waiters_crit_sect_); 155 LeaveCriticalSection(&num_waiters_crit_sect_);
156 156
157 if (last_waiter) { 157 if (last_waiter) {
158 // Reset/unset the WakeAll() event since all threads have been 158 // Reset/unset the WakeAll() event since all threads have been
159 // released. 159 // released.
160 ResetEvent(events_[eventID]); 160 ResetEvent(events_[eventID]);
161 } 161 }
162 162
163 EnterCriticalSection(&crit_sect.crit_); 163 EnterCriticalSection(crit_sect);
164 return ret_val; 164 return ret_val;
165 } 165 }
166 166
167 void ConditionVariableEventWin::Wake() { 167 void ConditionVariableEventWin::Wake() {
168 EnterCriticalSection(&num_waiters_crit_sect_); 168 EnterCriticalSection(&num_waiters_crit_sect_);
169 const bool have_waiters = (num_waiters_[WAKEALL_0] > 0) || 169 const bool have_waiters = (num_waiters_[WAKEALL_0] > 0) ||
170 (num_waiters_[WAKEALL_1] > 0); 170 (num_waiters_[WAKEALL_1] > 0);
171 LeaveCriticalSection(&num_waiters_crit_sect_); 171 LeaveCriticalSection(&num_waiters_crit_sect_);
172 172
173 if (have_waiters) { 173 if (have_waiters) {
(...skipping 11 matching lines...) Expand all
185 const EventWakeUpType eventID = eventID_; 185 const EventWakeUpType eventID = eventID_;
186 const bool have_waiters = num_waiters_[eventID] > 0; 186 const bool have_waiters = num_waiters_[eventID] > 0;
187 LeaveCriticalSection(&num_waiters_crit_sect_); 187 LeaveCriticalSection(&num_waiters_crit_sect_);
188 188
189 if (have_waiters) { 189 if (have_waiters) {
190 SetEvent(events_[eventID]); 190 SetEvent(events_[eventID]);
191 } 191 }
192 } 192 }
193 193
194 } // namespace webrtc 194 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698