1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/quic/quic_alarm.h" 6 7 #include "base/logging.h" 8 9 namespace net { 10 11 QuicAlarm::QuicAlarm(Delegate* delegate) 12 : delegate_(delegate), 13 deadline_(QuicTime::Zero()) { 14 } 15 16 QuicAlarm::~QuicAlarm() {} 17 18 void QuicAlarm::Set(QuicTime deadline) { 19 DCHECK(!IsSet()); 20 DCHECK(deadline.IsInitialized()); 21 deadline_ = deadline; 22 SetImpl(); 23 } 24 25 void QuicAlarm::Cancel() { 26 deadline_ = QuicTime::Zero(); 27 CancelImpl(); 28 } 29 30 bool QuicAlarm::IsSet() const { 31 return deadline_.IsInitialized(); 32 } 33 34 void QuicAlarm::Fire() { 35 if (!deadline_.IsInitialized()) { 36 return; 37 } 38 39 deadline_ = QuicTime::Zero(); 40 QuicTime deadline = delegate_->OnAlarm(); 41 // delegate_->OnAlarm() might call Set(), in which case deadline_ will 42 // already contain the new value, so don't overwrite it. 43 if (!deadline_.IsInitialized() && deadline.IsInitialized()) { 44 Set(deadline); 45 } 46 } 47 48 } // namespace net 49