From c742c292b6617c08695367fbd1de9f21e942ffd4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 May 2013 15:29:21 -0700 Subject: [PATCH] have the audio mixer output a stacktrace when it crashes --- audio-mixer/src/main.cpp | 13 ++++++++----- libraries/shared/src/Stacktrace.cpp | 27 +++++++++++++++++++++++++++ libraries/shared/src/Stacktrace.h | 16 ++++++++++++++++ 3 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 libraries/shared/src/Stacktrace.cpp create mode 100644 libraries/shared/src/Stacktrace.h diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 5ab7f621df..06c2300315 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -16,10 +16,13 @@ #include #include #include + #include #include #include #include +#include + #include "AudioRingBuffer.h" #include "PacketHeaders.h" @@ -71,8 +74,7 @@ void plateauAdditionOfSamples(int16_t &mixSample, int16_t sampleToAdd) { mixSample = normalizedSample; } -void *sendBuffer(void *args) -{ +void *sendBuffer(void *args) { int sentBytes; int nextFrame = 0; timeval startTime; @@ -255,11 +257,12 @@ void attachNewBufferToAgent(Agent *newAgent) { } } -int main(int argc, const char * argv[]) -{ - AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AUDIO_MIXER, MIXER_LISTEN_PORT); +int main(int argc, const char* argv[]) { + signal(SIGSEGV, printStacktrace); setvbuf(stdout, NULL, _IOLBF, 0); + AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AUDIO_MIXER, MIXER_LISTEN_PORT); + ssize_t receivedBytes = 0; agentList->linkedDataCreateCallback = attachNewBufferToAgent; diff --git a/libraries/shared/src/Stacktrace.cpp b/libraries/shared/src/Stacktrace.cpp new file mode 100644 index 0000000000..d53fc016ec --- /dev/null +++ b/libraries/shared/src/Stacktrace.cpp @@ -0,0 +1,27 @@ +// +// Stacktrace.cpp +// hifi +// +// Created by Stephen Birarda on 5/6/13. +// +// + +#include +#include +#include + +#include "Stacktrace.h" + +const int NUMBER_OF_STACK_ENTRIES = 20; + +void printStacktrace(int signal) { + void* array[NUMBER_OF_STACK_ENTRIES]; + + // get void*'s for all entries on the stack + size_t size = backtrace(array, NUMBER_OF_STACK_ENTRIES); + + // print out all the frames to stderr + fprintf(stderr, "Error: signal %d:\n", signal); + backtrace_symbols_fd(array, size, 2); + exit(1); +} \ No newline at end of file diff --git a/libraries/shared/src/Stacktrace.h b/libraries/shared/src/Stacktrace.h new file mode 100644 index 0000000000..c58422ea0c --- /dev/null +++ b/libraries/shared/src/Stacktrace.h @@ -0,0 +1,16 @@ +// +// Stacktrace.h +// hifi +// +// Created by Stephen Birarda on 5/6/13. +// +// + +#ifndef __hifi__Stacktrace__ +#define __hifi__Stacktrace__ + +#include + +void printStacktrace(int signal); + +#endif /* defined(__hifi__Stacktrace__) */