| Index: util/synchronization/semaphore.cc
 | 
| diff --git a/util/synchronization/semaphore.cc b/util/synchronization/semaphore.cc
 | 
| index d513fa0dd43981acc72b1ff155fa2d1e77616388..5f0a206adaa48fdf48e41221f35f2662a91053de 100644
 | 
| --- a/util/synchronization/semaphore.cc
 | 
| +++ b/util/synchronization/semaphore.cc
 | 
| @@ -14,6 +14,8 @@
 | 
|  
 | 
|  #include "util/synchronization/semaphore.h"
 | 
|  
 | 
| +#include <limits>
 | 
| +
 | 
|  #include "base/logging.h"
 | 
|  #include "base/posix/eintr_wrapper.h"
 | 
|  
 | 
| @@ -38,6 +40,28 @@ void Semaphore::Signal() {
 | 
|    dispatch_semaphore_signal(semaphore_);
 | 
|  }
 | 
|  
 | 
| +#elif defined(OS_WIN)
 | 
| +
 | 
| +Semaphore::Semaphore(int value)
 | 
| +    : semaphore_(CreateSemaphore(nullptr,
 | 
| +                                 value,
 | 
| +                                 std::numeric_limits<LONG>::max(),
 | 
| +                                 nullptr)) {
 | 
| +  PCHECK(semaphore_) << "CreateSemaphore";
 | 
| +}
 | 
| +
 | 
| +Semaphore::~Semaphore() {
 | 
| +  PCHECK(CloseHandle(semaphore_));
 | 
| +}
 | 
| +
 | 
| +void Semaphore::Wait() {
 | 
| +  PCHECK(WaitForSingleObject(semaphore_, INFINITE) == WAIT_OBJECT_0);
 | 
| +}
 | 
| +
 | 
| +void Semaphore::Signal() {
 | 
| +  PCHECK(ReleaseSemaphore(semaphore_, 1, nullptr));
 | 
| +}
 | 
| +
 | 
|  #else
 | 
|  
 | 
|  Semaphore::Semaphore(int value) {
 | 
| 
 |