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

Unified Diff: webrtc/system_wrappers/source/condition_variable_event_win.cc

Issue 2790533002: Remove ALL usage of CriticalSectionWrapper. (Closed)
Patch Set: remove winXP rw_lock include Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/system_wrappers/source/condition_variable_event_win.cc
diff --git a/webrtc/system_wrappers/source/condition_variable_event_win.cc b/webrtc/system_wrappers/source/condition_variable_event_win.cc
deleted file mode 100644
index 535cbc5460f7c9eca49fe93df0d040ab86223be0..0000000000000000000000000000000000000000
--- a/webrtc/system_wrappers/source/condition_variable_event_win.cc
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-Source:
-http://www1.cse.wustl.edu/~schmidt/ACE-copying.html
-
-License:
-Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM),
-and CoSMIC(TM)
-
-ACE(TM), TAO(TM), CIAO(TM), DAnCE>(TM), and CoSMIC(TM) (henceforth referred to
-as "DOC software") are copyrighted by Douglas C. Schmidt and his research
-group at Washington University, University of California, Irvine, and
-Vanderbilt University, Copyright (c) 1993-2009, all rights reserved. Since DOC
-software is open-source, freely available software, you are free to use,
-modify, copy, and distribute--perpetually and irrevocably--the DOC software
-source code and object code produced from the source, as well as copy and
-distribute modified versions of this software. You must, however, include this
-copyright statement along with any code built using DOC software that you
-release. No copyright statement needs to be provided if you just ship binary
-executables of your software products.
-You can use DOC software in commercial and/or binary software releases and are
-under no obligation to redistribute any of your source code that is built
-using DOC software. Note, however, that you may not misappropriate the DOC
-software code, such as copyrighting it yourself or claiming authorship of the
-DOC software code, in a way that will prevent DOC software from being
-distributed freely using an open-source development model. You needn't inform
-anyone that you're using DOC software in your software, though we encourage
-you to let us know so we can promote your project in the DOC software success
-stories.
-
-The ACE, TAO, CIAO, DAnCE, and CoSMIC web sites are maintained by the DOC
-Group at the Institute for Software Integrated Systems (ISIS) and the Center
-for Distributed Object Computing of Washington University, St. Louis for the
-development of open-source software as part of the open-source software
-community. Submissions are provided by the submitter ``as is'' with no
-warranties whatsoever, including any warranty of merchantability,
-noninfringement of third party intellectual property, or fitness for any
-particular purpose. In no event shall the submitter be liable for any direct,
-indirect, special, exemplary, punitive, or consequential damages, including
-without limitation, lost profits, even if advised of the possibility of such
-damages. Likewise, DOC software is provided as is with no warranties of any
-kind, including the warranties of design, merchantability, and fitness for a
-particular purpose, noninfringement, or arising from a course of dealing,
-usage or trade practice. Washington University, UC Irvine, Vanderbilt
-University, their employees, and students shall have no liability with respect
-to the infringement of copyrights, trade secrets or any patents by DOC
-software or any part thereof. Moreover, in no event will Washington
-University, UC Irvine, or Vanderbilt University, their employees, or students
-be liable for any lost revenue or profits or other special, indirect and
-consequential damages.
-
-DOC software is provided with no support and without any obligation on the
-part of Washington University, UC Irvine, Vanderbilt University, their
-employees, or students to assist in its use, correction, modification, or
-enhancement. A number of companies around the world provide commercial support
-for DOC software, however. DOC software is Y2K-compliant, as long as the
-underlying OS platform is Y2K-compliant. Likewise, DOC software is compliant
-with the new US daylight savings rule passed by Congress as "The Energy Policy
-Act of 2005," which established new daylight savings times (DST) rules for the
-United States that expand DST as of March 2007. Since DOC software obtains
-time/date and calendaring information from operating systems users will not be
-affected by the new DST rules as long as they upgrade their operating systems
-accordingly.
-
-The names ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), CoSMIC(TM), Washington
-University, UC Irvine, and Vanderbilt University, may not be used to endorse
-or promote products or services derived from this source without express
-written permission from Washington University, UC Irvine, or Vanderbilt
-University. This license grants no permission to call products or services
-derived from this source ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), or CoSMIC(TM),
-nor does it grant permission for the name Washington University, UC Irvine, or
-Vanderbilt University to appear in their names.
-*/
-
-/*
- * This source code contain modifications to the original source code
- * which can be found here:
- * http://www.cs.wustl.edu/~schmidt/win32-cv-1.html (section 3.2).
- * Modifications:
- * 1) Dynamic detection of native support for condition variables.
- * 2) Use of WebRTC defined types and classes. Renaming of some functions.
- * 3) Introduction of a second event for wake all functionality. This prevents
- * a thread from spinning on the same condition variable, preventing other
- * threads from waking up.
- */
-
-#include "webrtc/system_wrappers/source/condition_variable_event_win.h"
-
-#include "webrtc/system_wrappers/include/critical_section_wrapper.h"
-
-namespace webrtc {
-
-ConditionVariableEventWin::ConditionVariableEventWin() : eventID_(WAKEALL_0) {
- memset(&num_waiters_[0], 0, sizeof(num_waiters_));
-
- InitializeCriticalSection(&num_waiters_crit_sect_);
-
- events_[WAKEALL_0] = CreateEvent(NULL, // no security attributes
- TRUE, // manual-reset, sticky event
- FALSE, // initial state non-signaled
- NULL); // no name for event
-
- events_[WAKEALL_1] = CreateEvent(NULL, // no security attributes
- TRUE, // manual-reset, sticky event
- FALSE, // initial state non-signaled
- NULL); // no name for event
-
- events_[WAKE] = CreateEvent(NULL, // no security attributes
- FALSE, // auto-reset, sticky event
- FALSE, // initial state non-signaled
- NULL); // no name for event
-}
-
-ConditionVariableEventWin::~ConditionVariableEventWin() {
- CloseHandle(events_[WAKE]);
- CloseHandle(events_[WAKEALL_1]);
- CloseHandle(events_[WAKEALL_0]);
-
- DeleteCriticalSection(&num_waiters_crit_sect_);
-}
-
-void ConditionVariableEventWin::SleepCS(CRITICAL_SECTION* crit_sect) {
- SleepCS(crit_sect, INFINITE);
-}
-
-bool ConditionVariableEventWin::SleepCS(CRITICAL_SECTION* crit_sect,
- unsigned long max_time_in_ms) {
- EnterCriticalSection(&num_waiters_crit_sect_);
-
- // Get the eventID for the event that will be triggered by next
- // WakeAll() call and start waiting for it.
- const EventWakeUpType eventID =
- (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0;
-
- ++(num_waiters_[eventID]);
- LeaveCriticalSection(&num_waiters_crit_sect_);
-
- LeaveCriticalSection(crit_sect);
- HANDLE events[2];
- events[0] = events_[WAKE];
- events[1] = events_[eventID];
- const DWORD result = WaitForMultipleObjects(2, // Wait on 2 events.
- events,
- FALSE, // Wait for either.
- max_time_in_ms);
-
- const bool ret_val = (result != WAIT_TIMEOUT);
-
- EnterCriticalSection(&num_waiters_crit_sect_);
- --(num_waiters_[eventID]);
-
- // Last waiter should only be true for WakeAll(). WakeAll() correspond
- // to position 1 in events[] -> (result == WAIT_OBJECT_0 + 1)
- const bool last_waiter = (result == WAIT_OBJECT_0 + 1) &&
- (num_waiters_[eventID] == 0);
- LeaveCriticalSection(&num_waiters_crit_sect_);
-
- if (last_waiter) {
- // Reset/unset the WakeAll() event since all threads have been
- // released.
- ResetEvent(events_[eventID]);
- }
-
- EnterCriticalSection(crit_sect);
- return ret_val;
-}
-
-void ConditionVariableEventWin::Wake() {
- EnterCriticalSection(&num_waiters_crit_sect_);
- const bool have_waiters = (num_waiters_[WAKEALL_0] > 0) ||
- (num_waiters_[WAKEALL_1] > 0);
- LeaveCriticalSection(&num_waiters_crit_sect_);
-
- if (have_waiters) {
- SetEvent(events_[WAKE]);
- }
-}
-
-void ConditionVariableEventWin::WakeAll() {
- EnterCriticalSection(&num_waiters_crit_sect_);
-
- // Update current WakeAll() event
- eventID_ = (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0;
-
- // Trigger current event
- const EventWakeUpType eventID = eventID_;
- const bool have_waiters = num_waiters_[eventID] > 0;
- LeaveCriticalSection(&num_waiters_crit_sect_);
-
- if (have_waiters) {
- SetEvent(events_[eventID]);
- }
-}
-
-} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698