blob: 73ffda1850d390c867b8249305c58ebf34e3e29f [file] [log] [blame]
// Copyright 2025 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/developer/memory/monitor/imminent_oom_observer.h"
#include <lib/syslog/cpp/macros.h>
#include <zircon/status.h>
#include <zircon/syscalls.h>
namespace monitor {
ImminentOomEventObserver::ImminentOomEventObserver(zx_handle_t imminent_oom_event_handle)
: imminent_oom_event_handle_(imminent_oom_event_handle) {}
bool ImminentOomEventObserver::IsImminentOom() {
zx_signals_t observed;
zx_status_t status = zx_object_wait_one(imminent_oom_event_handle_, ZX_EVENT_SIGNALED,
ZX_TIME_INFINITE_PAST, &observed);
// With a deadline of ZX_TIME_INFINITE_PAST, it is expected that this call times out.
if (status != ZX_OK && status != ZX_ERR_TIMED_OUT) {
FX_LOGS(ERROR) << "zx_object_wait_one returned " << zx_status_get_string(status);
return false;
}
return observed & ZX_EVENT_SIGNALED;
}
} // namespace monitor