diff options
| author | Mikaƫl Capelle <capelle.mikael@gmail.com> | 2021-02-12 18:09:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-12 18:09:05 +0100 |
| commit | 7dc28b10d9ed4cd4af15eeaca89b50996d6fd27d (patch) | |
| tree | ea0388146020c3ed7569ea9857f27338a68e529b /src | |
| parent | 9f0c8c31a6267ae9bf3181b29f65710fb30fad79 (diff) | |
| parent | d179ad01c8d618a33b2dea3d731a67a62226c7c3 (diff) | |
Merge pull request #1407 from isanae/processes-in-job
Fixes for processesInJob()
Diffstat (limited to 'src')
| -rw-r--r-- | src/envmodule.cpp | 26 |
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 {}; } |
