CloseHandle(hStdError[i]);
}
- DWORD exitCode = 0; // 0 == assume success
+ SpmiResult result = SpmiResult::Success;
if (!closeRequested)
{
- // Figure out the error code to use. We use the largest magnitude error code of the children.
+ // Figure out the error code to use.
// Mainly, if any child returns non-zero, we want to return non-zero, to indicate failure.
for (int i = 0; i < o.workerCount; i++)
{
- DWORD exitCodeTmp;
- BOOL ok = GetExitCodeProcess(hProcesses[i], &exitCodeTmp);
- if (ok && (exitCodeTmp > exitCode))
+ DWORD exitCodeTmp;
+ BOOL ok = GetExitCodeProcess(hProcesses[i], &exitCodeTmp);
+ SpmiResult childResult = (SpmiResult)exitCodeTmp;
+ if (ok && (childResult != result))
{
- exitCode = exitCodeTmp;
+ if (result == SpmiResult::Error || childResult == SpmiResult::Error)
+ {
+ result = SpmiResult::Error;
+ }
+ else if (result == SpmiResult::Diffs || childResult == SpmiResult::Diffs)
+ {
+ result = SpmiResult::Diffs;
+ }
+ else if (result == SpmiResult::Misses || childResult == SpmiResult::Misses)
+ {
+ result = SpmiResult::Misses;
+ }
+ else if (result == SpmiResult::JitFailedToInit || childResult == SpmiResult::JitFailedToInit)
+ {
+ result = SpmiResult::JitFailedToInit;
+ }
+ else
+ {
+ result = SpmiResult::GeneralFailure;
+ }
}
}
}
}
- return (int)exitCode;
+ return (int)result;
}
if (0 != PAL_Initialize(argc, argv))
{
fprintf(stderr, "Error: Fail to PAL_Initialize\n");
- return -1;
+ return (int)SpmiResult::GeneralFailure;
}
#endif // FEATURE_PAL
CommandLine::Options o;
if (!CommandLine::Parse(argc, argv, &o))
{
- return -1;
+ return (int)SpmiResult::GeneralFailure;
}
if (o.parallel)
new MethodContextReader(o.nameOfInputMethodContextFile, o.indexes, o.indexCount, o.hash, o.offset, o.increment);
if (!reader->isValid())
{
- return -1;
+ return (int)SpmiResult::GeneralFailure;
}
int loadedCount = 0;
{
if (!nearDiffer.InitAsmDiff())
{
- return -1;
+ return (int)SpmiResult::GeneralFailure;
}
}
MethodContextBuffer mcb = reader->GetNextMethodContext();
if (mcb.Error())
{
- return -1;
+ return (int)SpmiResult::GeneralFailure;
}
else if (mcb.allDone())
{
loadedCount++;
if (!MethodContext::Initialize(loadedCount, mcb.buff, mcb.size, &mc))
- return -1;
+ return (int)SpmiResult::GeneralFailure;
if (jit == nullptr)
{
if (jit == nullptr)
{
// InitJit already printed a failure message
- return -2;
+ return (int)SpmiResult::JitFailedToInit;
}
if (o.nameOfJit2 != nullptr)
if (jit2 == nullptr)
{
// InitJit already printed a failure message
- return -2;
+ return (int)SpmiResult::JitFailedToInit;
}
}
}
if (hFileOut == INVALID_HANDLE_VALUE)
{
LogError("Failed to open output '%s'. GetLastError()=%u", buff, GetLastError());
- return -1;
+ return (int)SpmiResult::GeneralFailure;
}
mc->saveToFile(hFileOut);
if (CloseHandle(hFileOut) == 0)
{
LogError("CloseHandle for output file failed. GetLastError()=%u", GetLastError());
- return -1;
+ return (int)SpmiResult::GeneralFailure;
}
LogInfo("Wrote out repro to '%s'", buff);
}
}
Logger::Shutdown();
- enum Result
- {
- Success,
- Error,
- Diffs,
- Misses
- };
-
- Result result = Success;
+ SpmiResult result = SpmiResult::Success;
if (errorCount > 0)
{
- result = Error;
+ result = SpmiResult::Error;
}
else if (o.applyDiff && matchCount != jittedCount)
{
- result = Diffs;
+ result = SpmiResult::Diffs;
}
else if (missingCount > 0)
{
- result = Misses;
+ result = SpmiResult::Misses;
}
- return result;
+ return (int)result;
}