View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000736 | Plugins | EMenu | public | 2009-02-16 06:41 | 2009-10-25 21:57 |
Reporter | alexeypa | Assigned To | alexy | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0000736: Плагин EMenu некорректно завершает рабочий поток. | ||||
Description | CThreadTerminator::~CThreadTerminator, вызываемый из DllMainCRTStartup (DLL_PROCESS_DETACH, ...) пытается дождаться завершения потока, выполняя вот такой код: if (WaitForSingleObject(hThread, 100)==WAIT_TIMEOUT) { if (!TerminateThread(hThread, 0)) { assert(0); } } Проблема в том, что если поток hThread не завершился к моменту вызова ~CThreadTerminator, WaitForSingleObject всегда будет вываливаться по таймауту. Завершаясь, hThread вызовет ExitThread, который попытается захватить критическую секцию в недрах ntdll.dll. Эта же самая секция захватывается перед вызовом DllMainCRTStartup (DLL_PROCESS_DETACH, ...). | ||||
Tags | No tags attached. | ||||
|
Переместил баг в более подходящее место: http://bugs.farmanager.com/view.php?id=746 |
|
> Перенес баг в более подходящее место Пожалуйста, не надо переносить баги методом копипаста. Есть более культурные способы. |
|
Есть предложения? |
|
предлагаю ждать в другом месте |
2009-06-30 17:21
|
emenu.diff (742 bytes)
Index: OleThread.cpp =================================================================== --- OleThread.cpp (revision 3204) +++ OleThread.cpp (working copy) @@ -134,17 +134,22 @@ { assert(0); } + WaitForSingleObject(hThread, 100); } CThreadTerminator::~CThreadTerminator() { if (!hThread) return; - if (WaitForSingleObject(hThread, 100)==WAIT_TIMEOUT) + DWORD nStatus; + if (GetExitCodeThread(hThread, &nStatus)) { - if (!TerminateThread(hThread, 0)) - { - assert(0); - } + if (STILL_ACTIVE==nStatus) + { + if (!TerminateThread(hThread, 0)) + { + assert(0); + } + } } if (!CloseHandle(hThread)) { |
|
Fixed. build 33. |
|
Fixed. build 33. |
|
fixed. build 33. |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-02-16 06:41 | alexeypa | New Issue | |
2009-02-19 06:32 | alexeypa | Note Added: 0002493 | |
2009-02-19 06:32 | alexeypa | Duplicate ID | 0 => 746 |
2009-02-19 06:32 | alexeypa | Status | new => resolved |
2009-02-19 06:32 | alexeypa | Resolution | open => duplicate |
2009-02-19 06:32 | alexeypa | Assigned To | => alexeypa |
2009-02-19 08:15 | DrKnS | Project | Far Manager => Plugins |
2009-02-19 08:18 | DrKnS | Assigned To | alexeypa => |
2009-02-19 08:18 | DrKnS | Note Added: 0002496 | |
2009-02-19 08:18 | DrKnS | Status | resolved => new |
2009-02-19 08:18 | DrKnS | Resolution | duplicate => reopened |
2009-02-19 08:18 | DrKnS | Category | _Common => EMenu |
2009-04-05 13:19 | alexy | Status | new => assigned |
2009-04-05 13:19 | alexy | Assigned To | => alexy |
2009-05-31 11:48 | alexy | Note Added: 0003380 | |
2009-06-30 17:21 | dialex | Note Added: 0003653 | |
2009-06-30 17:21 | dialex | File Added: emenu.diff | |
2009-10-25 21:29 | alexy | Note Added: 0004339 | |
2009-10-25 21:30 | alexy | Note Added: 0004340 | |
2009-10-25 21:38 | alexy | Note Added: 0004341 | |
2009-10-25 21:52 | alexy | Status | assigned => resolved |
2009-10-25 21:57 | DrKnS | Status | resolved => closed |
2009-10-25 21:57 | DrKnS | Resolution | reopened => fixed |
2009-10-25 21:57 | DrKnS | Fixed in Version | => 2.0 |