From 06d1602c0dd42495acd671fe0105c5cefc719c4c Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Tue, 17 Jul 2018 14:39:21 -0700 Subject: [PATCH] Use max of --max & --n for resources; other clean-up --- assignment-client/src/AssignmentClientMonitor.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 9809c1b7d6..eb764a128c 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -74,7 +74,7 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerListener(PacketType::AssignmentClientStatus, this, "handleChildStatusPacket"); - adjustOsResources(_numAssignmentClientForks); + adjustOsResources(std::max(_numAssignmentClientForks, _maxAssignmentClientForks)); // use QProcess to fork off a process for each of the child assignment clients for (unsigned int i = 0; i < _numAssignmentClientForks; i++) { spawnChildClient(); @@ -380,7 +380,8 @@ bool AssignmentClientMonitor::handleHTTPRequest(HTTPConnection* connection, cons void AssignmentClientMonitor::adjustOsResources(unsigned int numForks) const { #ifdef _POSIX_SOURCE - // QProcess on Unix uses six descriptors, some temporarily, for each child proc. + // QProcess on Unix uses six (I think) descriptors, some temporarily, for each child proc. + // Formula based on tests with a Ubuntu 16.04 VM. unsigned requiredDescriptors = 30 + 6 * numForks; struct rlimit descLimits; if (getrlimit(RLIMIT_NOFILE, &descLimits) == 0) { @@ -393,6 +394,9 @@ void AssignmentClientMonitor::adjustOsResources(unsigned int numForks) const qDebug() << "Failed to reset descriptor limit to" << requiredDescriptors << ":" << errorString; } } + } else { + const char *const errorString = strerror(errno); + qDebug() << "Failed to read descriptor limit:" << errorString; } #endif }