github.com/searKing/golang/go@v1.2.74/os/signal/cgo/signal_linux.cgo.cpp (about)

     1  // Copyright (c) 2019 The searKing authors. All Rights Reserved.
     2  //
     3  // Use of this source code is governed by a MIT-style license
     4  // that can be found in the LICENSE file in the root of the source
     5  // tree. An additional intellectual property rights grant can be found
     6  // in the file PATENTS.  All contributing project authors may
     7  // be found in the AUTHORS file in the root of the source tree.
     8  
     9  // +build cgo
    10  // +build linux
    11  
    12  #include <algorithm>
    13  
    14  #include "signal.cgo.h"
    15  #include "signal_handler_linux.hpp"
    16  
    17  int CGO_SignalHandlerSetSig(int signum) {
    18    return searking::SignalHandler::SetSig(signum);
    19  }
    20  
    21  void CGO_SignalHandlerSetSignalDumpToFd(int fd) {
    22    searking::SignalHandler::GetInstance().SetSignalDumpToFd(fd);
    23  }
    24  
    25  void CGO_SignalHandlerSetStacktraceDumpToFile(char* name) {
    26    searking::SignalHandler::GetInstance().SetStacktraceDumpToFile(name);
    27  }
    28  
    29  void CGO_SignalHandlerDumpPreviousStacktrace() {
    30    searking::SignalHandler::GetInstance().DumpPreviousStacktrace();
    31  }
    32  
    33  // don't forget to free the string after finished using it
    34  char* CGO_PreviousStacktrace() {
    35    auto str = searking::SignalHandler::GetInstance().PreviousStacktrace();
    36  
    37    char* writable = static_cast<char*>(malloc((str.size() + 1) * sizeof(char)));
    38    std::copy(str.begin(), str.end(), writable);
    39    writable[str.size()] = '\0';  // don't forget the terminating 0
    40    return writable;
    41  }
    42  
    43  void CGO_SetSigInvokeChain(const int from, const int to, const int wait,
    44                             const int sleepInSeconds) {
    45    searking::SignalHandler::GetInstance().SetSigInvokeChain(from, to, wait,
    46                                                             sleepInSeconds);
    47  }