brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1022 B · 7ce01ee Raw
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