Ошибка #8
Некорректное завершение работы процесса webclient.exe
| Status: | Новый | Start: | 11/22/2009 | |
| Priority: | Немедленный | Due date: | ||
| Assigned to: | - | % Done: | 0% |
|
| Category: | Исправления | Spent time: | - | |
| Target version: | 1.0 | |||
Description
При обработке команды на обновление файла config.xml (cmdReceiveFile): процессом conn.exe, выполняется следующий код:
case cnCmdReceiveFile:
Log->Write("File received, restarting WebClient...");
CheckTimeTimer->Enabled=false;
CheckThreadsTimer->Enabled=false;
if ((FileExists("\\WebUpdate\\updater.exe"))&&((FileExists("\\WebUpdate\\update.exe"))||(DirectoryExists("\\WebUpdate\\update"))))
{
if (StartUpdate())
{
TerminateWebClient();
Close();
return;
}
}
else
{
RestartWebClient();
}
break;
Здесь происходит вызов метода TerminateWebClient:
void TForm1::TerminateWebClient()
{
try
{
Log->Write("Terminating WebClient...");
HANDLE WCHandle=FileMap->ReadWCHandle();
TerminateProgram(WCHandle);
Sleep(500);
if (IsProcessRunning(WCHandle))
if(Cfg->Terminal.RebootAllowed) {
Log->Write("Can't terminate WebClient. Reboot allowed - trying to reboot...");
Reboot();
} else
Log->Append("Can't terminate WebClient. Reboot not allowed.");
}
catch(...)
{
ExceptionFilter(__FILE__, BOOST_CURRENT_FUNCTION, __LINE__, Log);
}
}
bool TForm1::TerminateProgram(HANDLE PrHandle)
{
try
{
Log->Write("Terminating program...");
if (!TerminateProcess(PrHandle, NO_ERROR))
Log->Append(ShowError("error").c_str());
else {
Log->Append("OK.");
return true;
}
return false;
}
catch(...)
{
ExceptionFilter(__FILE__, BOOST_CURRENT_FUNCTION, __LINE__, Log);
return false;
}
}
Очевидно, что здесь происходит принудительное завершение работы процесса webclient.exe через WinAPI функцию TerminateProcess. Поскольку conn.exe не проверяет текущее состояние webclient, что может привести к потере платежей от пользователей.
Кроме того, во время завершения работы возникает ошибка EAccessViolation.Фрагмент log-файла Conn2:
13.11.2009 19:26:48.252 Restarting WebClient... 13.11.2009 19:26:48.252 Terminating WebClient... 13.11.2009 19:26:48.252 Terminating program...OK. 13.11.2009 19:26:48.752 Can't terminate WebClient. Reboot allowed - trying to reboot... 13.11.2009 19:26:48.752 Starting C:\WebClient\WebClient.exe...OK. 13.11.2009 19:26:49.299 Terminating conn... 13.11.2009 19:26:49.392 FormClose started. 13.11.2009 19:26:49.392 Waiting for threads to finish... 13.11.2009 19:26:50.345 Commands thread...done. 13.11.2009 19:26:50.345 SendHeartBeat thread...done. 13.11.2009 19:26:50.439 Payments thread...done. 13.11.2009 19:26:50.486 Stat thread...done. 13.11.2009 19:26:50.486 FileMap...done. 13.11.2009 19:26:50.486 Mutex...done. 13.11.2009 19:26:51.408 CryptLib.Close() 13.11.2009 19:26:51.408 Cfg...done. 13.11.2009 19:26:52.377 Log...Фрагмент log-файла exception:
Version = 1.0.9.11 13.11.2009 19:26:53.064 13.11.2009 19:26:53.064 borland Exception in file: ConnMainForm.cpp ,from function: TForm1::CheckThreads, catch line: 691, message: EAccessViolation 13.11.2009 19:26:53.064