5674b62fd90df90955867e674a8f157a58a0e953 galt Wed Jun 18 14:33:02 2025 -0700 Fixes packet overflow issue in Parasol paraNode resurrect. refs #34883 diff --git src/parasol/paraNode/paraNode.c src/parasol/paraNode/paraNode.c index 82c9c89902c..428c1f57e6c 100644 --- src/parasol/paraNode/paraNode.c +++ src/parasol/paraNode/paraNode.c @@ -571,46 +571,55 @@ pmPrintf(&pm, "jobDone %s %s", jobIdString, job->doneMessage); } pmSend(&pm, mainRudp); } } void doResurrect(char *line, struct sockaddr_storage *ipAddress) /* Send back I'm alive message */ { struct paraMessage pm; struct dlNode *node; int jobsReported = 0; char ipStr[NI_MAXHOST]; getAddrAsString6n4(ipAddress, ipStr, sizeof ipStr); pmInit(&pm, ipStr, paraHubPortStr); -pmPrintf(&pm, "alive %s", hostName); + for (node = jobsRunning->head; !dlEnd(node); node = node->next) { struct job *job = node->val; - pmPrintf(&pm, " %d", job->jobId); + pmClear(&pm); + pmPrintf(&pm, "alive %s %d", hostName, job->jobId); + if (!pmSend(&pm, mainRudp)) + return; ++jobsReported; } for (node = jobsFinished->head; !dlEnd(node); node = node->next) { struct job *job = node->val; if (jobsReported >= maxProcs) break; - pmPrintf(&pm, " %d", job->jobId); + pmClear(&pm); + pmPrintf(&pm, "alive %s %d", hostName, job->jobId); + if (!pmSend(&pm, mainRudp)) + return; ++jobsReported; } -pmSend(&pm, mainRudp); +pmClear(&pm); +pmPrintf(&pm, "alive %s done", hostName); +if (!pmSend(&pm, mainRudp)) + return; } void doRun(char *line, struct sockaddr_storage *ipAddress) /* Execute command. */ { char *jobMessage = cloneString(line); static char *args[1024]; int argCount; char ipStr[NI_MAXHOST]; getAddrAsString6n4(ipAddress, ipStr, sizeof ipStr); nextRandom(); if (line == NULL) warn("Executing nothing..."); else