diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 5ab7f621df..c725637184 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -16,10 +16,14 @@ #include #include #include +#include + #include #include #include #include +#include + #include "AudioRingBuffer.h" #include "PacketHeaders.h" @@ -71,8 +75,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 +258,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/domain-server/src/main.cpp b/domain-server/src/main.cpp index 553484dfc7..753009ffa9 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]; @@ -118,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; @@ -146,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); + } } } diff --git a/libraries/shared/src/Stacktrace.cpp b/libraries/shared/src/Stacktrace.cpp new file mode 100644 index 0000000000..0e9b42f50d --- /dev/null +++ b/libraries/shared/src/Stacktrace.cpp @@ -0,0 +1,28 @@ +// +// Stacktrace.cpp +// hifi +// +// Created by Stephen Birarda on 5/6/13. +// +// + +#include +#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__) */