have silent node removal flag reset on join

This commit is contained in:
Stephen Birarda 2013-10-29 15:59:09 -07:00
parent 6e9ee93ed6
commit 66b27fa607

View file

@ -772,19 +772,14 @@ void* removeSilentNodes(void *args) {
checkTimeUsecs = usecTimestampNow();
for(NodeList::iterator node = nodeList->begin(); node != nodeList->end(); ++node) {
qDebug() << "Locking node" << node->getUUID() << "\n";
node->lock();
qDebug() << "N:" << usecTimestampNow() << "LH:" << node->getLastHeardMicrostamp() << "\n";
qDebug() << "Diff:" << usecTimestampNow() - node->getLastHeardMicrostamp() << "\n";
if ((usecTimestampNow() - node->getLastHeardMicrostamp()) > NODE_SILENCE_THRESHOLD_USECS) {
// kill this node, don't lock - we already did it
nodeList->killNode(&(*node), false);
}
node->unlock();
qDebug() << "Unlocking node" << node->getUUID() << "\n";
}
sleepTime = NODE_SILENCE_THRESHOLD_USECS - (usecTimestampNow() - checkTimeUsecs);
@ -796,7 +791,6 @@ void* removeSilentNodes(void *args) {
#else
if (sleepTime > 0) {
qDebug() << "Sleeping for" << sleepTime << "\n";
usleep(sleepTime);
}
@ -808,13 +802,23 @@ void* removeSilentNodes(void *args) {
}
void NodeList::startSilentNodeRemovalThread() {
pthread_create(&removeSilentNodesThread, NULL, removeSilentNodes, (void*) this);
if (!silentNodeThreadStopFlag) {
pthread_create(&removeSilentNodesThread, NULL, removeSilentNodes, (void*) this);
} else {
qDebug("Refusing to start silent node removal thread from previously failed join.\n");
}
}
void NodeList::stopSilentNodeRemovalThread() {
silentNodeThreadStopFlag = true;
pthread_join(removeSilentNodesThread, NULL);
int joinResult = pthread_join(removeSilentNodesThread, NULL);
if (joinResult == 0) {
silentNodeThreadStopFlag = false;
} else {
qDebug("Silent node removal thread join failed with %d. Will not restart.\n", joinResult);
}
}
const QString QSETTINGS_GROUP_NAME = "NodeList";