// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/quic/quic_alarm.h"
#include "base/logging.h"
namespace net {
QuicAlarm::QuicAlarm(Delegate* delegate)
: delegate_(delegate),
deadline_(QuicTime::Zero()) {
}
QuicAlarm::~QuicAlarm() {}
void QuicAlarm::Set(QuicTime deadline) {
DCHECK(!IsSet());
DCHECK(deadline.IsInitialized());
deadline_ = deadline;
SetImpl();
}
void QuicAlarm::Cancel() {
deadline_ = QuicTime::Zero();
CancelImpl();
}
bool QuicAlarm::IsSet() const {
return deadline_.IsInitialized();
}
void QuicAlarm::Fire() {
if (!deadline_.IsInitialized()) {
return;
}
deadline_ = QuicTime::Zero();
QuicTime deadline = delegate_->OnAlarm();
// delegate_->OnAlarm() might call Set(), in which case deadline_ will
// already contain the new value, so don't overwrite it.
if (!deadline_.IsInitialized() && deadline.IsInitialized()) {
Set(deadline);
}
}
} // namespace net