From a4c857315ad9b80b6174ff88d70ef5b8f88dff85 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Sun, 29 Sep 2019 22:55:39 +0000 Subject: [PATCH] Add shutdown annotations for crash reporting --- assignment-client/src/AssignmentClient.cpp | 5 ++++ domain-server/src/DomainServer.cpp | 5 ++++ domain-server/src/DomainServer.h | 2 ++ domain-server/src/main.cpp | 5 ++-- libraries/shared/src/CrashAnnotations.cpp | 27 ++++++++++++++++++++++ libraries/shared/src/CrashAnnotations.h | 23 ++++++++++++++++++ 6 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 libraries/shared/src/CrashAnnotations.cpp create mode 100644 libraries/shared/src/CrashAnnotations.h diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 1ef375b562..a1a2b7c1b5 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -144,6 +145,7 @@ AssignmentClient::~AssignmentClient() { } void AssignmentClient::aboutToQuit() { + crash::annotations::setShutdownState(true); stopAssignmentClient(); } @@ -173,6 +175,7 @@ void AssignmentClient::sendStatusPacketToACM() { void AssignmentClient::sendAssignmentRequest() { if (!_currentAssignment && !_isAssigned) { + crash::annotations::setShutdownState(false); auto nodeList = DependencyManager::get(); @@ -289,6 +292,8 @@ void AssignmentClient::handleAuthenticationRequest() { } void AssignmentClient::assignmentCompleted() { + crash::annotations::setShutdownState(true); + // we expect that to be here the previous assignment has completely cleaned up assert(_currentAssignment.isNull()); diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index de2382e647..cc9701ee73 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -432,6 +433,10 @@ DomainServer::~DomainServer() { DependencyManager::destroy(); } +void DomainServer::aboutToQuit() { + crash::annotations::setShutdownState(true); +} + void DomainServer::queuedQuit(QString quitMessage, int exitCode) { if (!quitMessage.isEmpty()) { qWarning() << qPrintable(quitMessage); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 5e8eee53fe..c725688b67 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -136,6 +136,8 @@ private slots: void tokenGrantFinished(); void profileRequestFinished(); + void aboutToQuit(); + signals: void iceServerChanged(); void userConnected(); diff --git a/domain-server/src/main.cpp b/domain-server/src/main.cpp index 7aea9cc3d4..ba12349347 100644 --- a/domain-server/src/main.cpp +++ b/domain-server/src/main.cpp @@ -15,9 +15,10 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include +#include #include #include -#include #include "DomainServer.h" @@ -32,6 +33,7 @@ int main(int argc, char* argv[]) { // use a do-while to handle domain-server restart do { + crash::annotations::setShutdownState(false); DomainServer domainServer(argc, argv); currentExitCode = domainServer.exec(); } while (currentExitCode == DomainServer::EXIT_CODE_REBOOT); @@ -39,4 +41,3 @@ int main(int argc, char* argv[]) { qInfo() << "Quitting."; return currentExitCode; } - diff --git a/libraries/shared/src/CrashAnnotations.cpp b/libraries/shared/src/CrashAnnotations.cpp new file mode 100644 index 0000000000..074b467244 --- /dev/null +++ b/libraries/shared/src/CrashAnnotations.cpp @@ -0,0 +1,27 @@ +// +// CrashAnnotations.cpp +// libraries/shared/src +// +// Created by Clement Brisset on 9/26/19. +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "SharedUtil.h" + +// Global variables specifically tuned to work with ptrace module for crash collection +// Do not move/rename unless you update the ptrace module with it. +bool crash_annotation_isShuttingDown = false; + +namespace crash { +namespace annotations { + +void setShutdownState(bool isShuttingDown) { + crash_annotation_isShuttingDown = isShuttingDown; +} + + +}; +}; diff --git a/libraries/shared/src/CrashAnnotations.h b/libraries/shared/src/CrashAnnotations.h new file mode 100644 index 0000000000..697d821335 --- /dev/null +++ b/libraries/shared/src/CrashAnnotations.h @@ -0,0 +1,23 @@ +// +// CrashAnnotations.h +// libraries/shared/src +// +// Created by Clement Brisset on 9/26/19. +// Copyright 2019 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_CrashAnnotations_h +#define hifi_CrashAnnotations_h + +namespace crash { +namespace annotations { + +void setShutdownState(bool isShuttingDown); + +}; +}; + +#endif // hifi_CrashAnnotations_h