// Copyright 2018 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. // // Lock Dependency Tracking Runtime API // // Systems must provide an implementation of the following functions to support // integration of the lock validator into the runtime environment. // #pragma once #include namespace lockdep { // Forward declarations. class AcquiredLockEntry; class ThreadLockState; class LockClassState; enum class LockResult : uint8_t; // System-defined hook to report detected lock validation failures. extern void SystemLockValidationError(AcquiredLockEntry* lock_entry, AcquiredLockEntry* conflicting_entry, ThreadLockState* state, void* caller_address, void* caller_frame, LockResult result); // System-defined hook to abort the program due to a fatal lock violation. extern void SystemLockValidationFatal(AcquiredLockEntry* lock_entry, ThreadLockState* state, void* caller_address, void* caller_frame, LockResult result); // System-defined hook to report detection of a circular lock dependency. extern void SystemCircularLockDependencyDetected(LockClassState* connected_set_root); // System-defined hook that returns the ThreadLockState instance for the current // thread. extern ThreadLockState* SystemGetThreadLockState(); // System-defined hook that initializes the ThreadLockState for the current thread. extern void SystemInitThreadLockState(ThreadLockState* state); // System-defined hook that triggers a loop detection pass. In response to this // event the implementation must trigger a call lockdep::LoopDetectionPass() on // a separate, dedicated or non-reentrant worker thread. Non-reentrancy is a // hard requirement as lockdep::LoopDetectionPass() mutates non-thread safe // state. An implementation may add hysteresis to prevent too many passes in a // given time interval. extern void SystemTriggerLoopDetection(); } // namespace lockdep