38 lines · cpp
1//===--- Shutdown.cpp - Unclean exit scenarios ----------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "support/Shutdown.h"10 11#include <atomic>12#include <cstdlib>13#include <thread>14 15namespace clang {16namespace clangd {17 18void abortAfterTimeout(std::chrono::seconds Timeout) {19 // This is more portable than sys::WatchDog, and yields a stack trace.20 std::thread([Timeout] {21 std::this_thread::sleep_for(Timeout);22 std::abort();23 }).detach();24}25 26static std::atomic<bool> ShutdownRequested = {false};27 28void requestShutdown() {29 if (ShutdownRequested.exchange(true))30 // This is the second shutdown request. Exit hard.31 std::abort();32}33 34bool shutdownRequested() { return ShutdownRequested; }35 36} // namespace clangd37} // namespace clang38