summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaƫl Capelle <capelle.mikael@gmail.com>2021-02-12 18:09:05 +0100
committerGitHub <noreply@github.com>2021-02-12 18:09:05 +0100
commit7dc28b10d9ed4cd4af15eeaca89b50996d6fd27d (patch)
treeea0388146020c3ed7569ea9857f27338a68e529b
parent9f0c8c31a6267ae9bf3181b29f65710fb30fad79 (diff)
parentd179ad01c8d618a33b2dea3d731a67a62226c7c3 (diff)
Merge pull request #1407 from isanae/processes-in-job
Fixes for processesInJob()
-rw-r--r--src/envmodule.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/envmodule.cpp b/src/envmodule.cpp
index 81cbad8a..dc6608d7 100644
--- a/src/envmodule.cpp
+++ b/src/envmodule.cpp
@@ -603,9 +603,16 @@ Process getProcessTreeFromProcess(HANDLE h)
std::vector<DWORD> processesInJob(HANDLE h)
{
- for (int tries=0; tries<5; ++tries) {
- DWORD maxIds = 100;
+ const int MaxTries = 5;
+ // doubled MaxTries times on failure
+ DWORD maxIds = 100;
+
+ // for logging
+ DWORD lastCount=0, lastAssigned=0;
+
+
+ for (int tries=0; tries<MaxTries; ++tries) {
const DWORD idsSize = sizeof(ULONG_PTR) * maxIds;
const DWORD bufferSize = sizeof(JOBOBJECT_BASIC_PROCESS_ID_LIST) + idsSize;
@@ -617,8 +624,10 @@ std::vector<DWORD> processesInJob(HANDLE h)
if (!r) {
const auto e = GetLastError();
- log::error("failed to get process ids in job, {}", formatSystemMessage(e));
- return {};
+ if (e != ERROR_MORE_DATA) {
+ log::error("failed to get process ids in job, {}", formatSystemMessage(e));
+ return {};
+ }
}
if (ids->NumberOfProcessIdsInList >= ids->NumberOfAssignedProcesses) {
@@ -632,9 +641,16 @@ std::vector<DWORD> processesInJob(HANDLE h)
// try again with a larger buffer
maxIds *= 2;
+
+ // for logging
+ lastCount = ids->NumberOfProcessIdsInList;
+ lastAssigned = ids->NumberOfAssignedProcesses;
}
- log::error("failed to get processes in job, can't get a buffer large enough");
+ log::error(
+ "failed to get processes in job, can't get a buffer large enough, "
+ "{}/{} ids", lastCount, lastAssigned);
+
return {};
}