blob: d50b3d4a141c26b8ef058ce67de502839b7db573 [file] [log] [blame]
// Copyright 2021 The Fuchsia 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 "src/sys/fuzzing/common/testing/signal-coordinator.h"
namespace fuzzing {
zx::eventpair FakeSignalCoordinator::Create() {
return coordinator_.Create([this](zx_signals_t observed) { return OnSignal(observed); });
}
void FakeSignalCoordinator::Pair(zx::eventpair paired) {
coordinator_.Pair(std::move(paired),
[this](zx_signals_t observed) { return OnSignal(observed); });
}
bool FakeSignalCoordinator::SignalPeer(Signal signal) { return coordinator_.SignalPeer(signal); }
zx_signals_t FakeSignalCoordinator::AwaitSignal() {
sync_completion_wait(&sync_, ZX_TIME_INFINITE);
sync_completion_reset(&sync_);
return observed_;
}
bool FakeSignalCoordinator::OnSignal(zx_signals_t observed) {
observed_ = observed;
sync_completion_signal(&sync_);
return (observed & ZX_EVENTPAIR_PEER_CLOSED) == 0;
}
} // namespace fuzzing