From 9f320568e1bcf8a97fd22918d34a000994daf158 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 May 2013 13:49:06 -0700 Subject: [PATCH 1/6] have the DS ignore packets it receives with incorrect headers --- domain-server/src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domain-server/src/main.cpp b/domain-server/src/main.cpp index 553484dfc7..1148f31c6a 100644 --- a/domain-server/src/main.cpp +++ b/domain-server/src/main.cpp @@ -96,7 +96,8 @@ int main(int argc, const char * argv[]) agentList->startSilentAgentRemovalThread(); while (true) { - if (agentList->getAgentSocket().receive((sockaddr *)&agentPublicAddress, packetData, &receivedBytes)) { + if (agentList->getAgentSocket().receive((sockaddr *)&agentPublicAddress, packetData, &receivedBytes) && + (packetData[0] == PACKET_HEADER_DOMAIN_RFD) || (packetData[0] == PACKET_HEADER_DOMAIN_LIST_REQUEST)) { std::map newestSoloAgents; agentType = packetData[1]; From cfd4a4a44ab0490d09aebeaa7d7c5ffea1e8b523 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 May 2013 14:46:01 -0700 Subject: [PATCH 2/6] smarter wake microstamp update for solo agents in DS --- domain-server/src/main.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/domain-server/src/main.cpp b/domain-server/src/main.cpp index 1148f31c6a..0ca8e47905 100644 --- a/domain-server/src/main.cpp +++ b/domain-server/src/main.cpp @@ -119,11 +119,6 @@ int main(int argc, const char * argv[]) agentType, agentList->getLastAgentId())) { agentList->increaseAgentId(); - } else if (packetData[0] == PACKET_HEADER_DOMAIN_RFD) { - // if this is a previous agent, and they are re-reporting for duty - // then we need to update the first receive time - Agent* refreshedAgent = agentList->agentWithAddress((sockaddr*) &agentLocalAddress); - refreshedAgent->setWakeMicrostamp(usecTimestampNow()); } currentBufferPos = broadcastPacket + 1; @@ -147,8 +142,14 @@ int main(int argc, const char * argv[]) } } } else { + double timeNow = usecTimestampNow(); // this is the agent, just update last receive to now - agent->setLastHeardMicrostamp(usecTimestampNow()); + agent->setLastHeardMicrostamp(timeNow); + + if (packetData[0] == PACKET_HEADER_DOMAIN_RFD + && memchr(SOLO_AGENT_TYPES, agentType, sizeof(SOLO_AGENT_TYPES))) { + agent->setWakeMicrostamp(timeNow); + } } } From c3ae1136e1c6099bf3fd02260a02c66df3428848 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 May 2013 14:48:57 -0700 Subject: [PATCH 3/6] fix warning on comparison in DS --- domain-server/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domain-server/src/main.cpp b/domain-server/src/main.cpp index 0ca8e47905..753009ffa9 100644 --- a/domain-server/src/main.cpp +++ b/domain-server/src/main.cpp @@ -97,7 +97,7 @@ int main(int argc, const char * argv[]) while (true) { if (agentList->getAgentSocket().receive((sockaddr *)&agentPublicAddress, packetData, &receivedBytes) && - (packetData[0] == PACKET_HEADER_DOMAIN_RFD) || (packetData[0] == PACKET_HEADER_DOMAIN_LIST_REQUEST)) { + (packetData[0] == PACKET_HEADER_DOMAIN_RFD || packetData[0] == PACKET_HEADER_DOMAIN_LIST_REQUEST)) { std::map newestSoloAgents; agentType = packetData[1]; From c742c292b6617c08695367fbd1de9f21e942ffd4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 May 2013 15:29:21 -0700 Subject: [PATCH 4/6] 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__) */ From 90a8027f6978c5517478df61ad4d62849b5e1998 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 May 2013 15:36:48 -0700 Subject: [PATCH 5/6] include cstdlib for call to exit --- libraries/shared/src/Stacktrace.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/shared/src/Stacktrace.cpp b/libraries/shared/src/Stacktrace.cpp index d53fc016ec..0e9b42f50d 100644 --- a/libraries/shared/src/Stacktrace.cpp +++ b/libraries/shared/src/Stacktrace.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "Stacktrace.h" From 84a8e481ffacb208f86ae7983aea03b1a9bd1cbe Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 6 May 2013 15:38:28 -0700 Subject: [PATCH 6/6] include signal for signal handler in audio mixer --- audio-mixer/src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 06c2300315..c725637184 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include