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 16: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 12:19 | alexy | Status | new => assigned |
| 2009-04-05 12:19 | alexy | Assigned To | => alexy |
| 2009-05-31 10:48 | alexy | Note Added: 0003380 | |
| 2009-06-30 16:21 | dialex | Note Added: 0003653 | |
| 2009-06-30 16: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 |