blob: 7585f2d87899a31a274c365b70415c95c9b027f8 [file] [log] [blame]
// Copyright 2022 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.
#ifndef SRC_VIRTUALIZATION_TESTS_LIB_BACKTRACE_WATCHDOG_H_
#define SRC_VIRTUALIZATION_TESTS_LIB_BACKTRACE_WATCHDOG_H_
#include <lib/zx/event.h>
#include <lib/zx/job.h>
#include <lib/zx/time.h>
#include <thread>
// BacktraceWatchdog is a one-shot watchdog that backtraces all the threads in a job if the timeout
// is reached prior to the watchdog being stopped. The watchdog spawns its own thread and does not
// rely on a thread being available on any dispatcher to trigger the timeout.
class BacktraceWatchdog {
public:
BacktraceWatchdog() = default;
~BacktraceWatchdog();
// Start the watchdog with the given job and timeout.
zx_status_t Start(zx::job job, zx::duration wait_time);
// Stop the watchdog early. This happens implicitly on destruction.
void Stop();
private:
int WatchdogThread();
void Backtrace();
bool running_ = false;
zx::time timeout_;
std::thread thread_;
zx::job job_;
zx::event event_;
};
#endif // SRC_VIRTUALIZATION_TESTS_LIB_BACKTRACE_WATCHDOG_H_