andromedarabbit / earlgrey

High performance online gaming server engine.
2 stars 1 forks source link

TaskQueue에서 ASSERT 발생 #62

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. 정확한 원인은 모르겠고 호출 스택만 구해놨습니다.

{{{
RS1LobbyServer.exe!Earlgrey::assertion_failed(const wchar_t *
 expr=0x0065ed90, const wchar_t * function=0x0065ede8, const wchar_t *
 file=0x0065ee98, long line=76)  줄 26        C++
 >
 RS1LobbyServer.exe!Earlgrey::Algorithm::Lockfree::TaskQueue::ExecuteAllTas
ksInQueue()
 줄 76 + 0x30 바이트  C++
 RS1LobbyServer.exe!Earlgrey::Algorithm::Lockfree::TaskQueue::Post(const
 std::tr1::function<void __cdecl(void)> & task=full)  줄 67       C++
 RS1LobbyServer.exe!Earlgrey::Algorithm::Lockfree::TaskQueue::InvokeMethod<
Earlgrey::Executor>(void
 (void)* func=0x00513430, Earlgrey::Executor * subthis=0x0207e810)  줄 105
 C++
        RS1LobbyServer.exe!Earlgrey::Executor::DoTasks()  줄 64  C++
 RS1LobbyServer.exe!Earlgrey::ExecutorTaskRunnerInvoker::ExecutorTaskRunner
Invoker()
 줄 80       C++
        RS1LobbyServer.exe!Earlgrey::ThreadRunnable::Run()  줄 28 + 0x8 바
이트
 C++
        RS1LobbyServer.exe!Earlgrey::Thread::Run()  줄 96 + 0x1d 바이트
 C++
        RS1LobbyServer.exe!Earlgrey::ThreadHolder::_ThreadProc(void *
 p=0x0207dec0)  줄 37 + 0x18 바이트    C++
        msvcr90d.dll!_callthreadstartex()  줄 348 + 0xf 바이트      C
        msvcr90d.dll!_threadstartex(void * ptd=0x02602ac0)  줄 331       C
        kernel32.dll!_BaseThreadStart@8()  + 0x34 바이트
}}}

Original issue reported on code.google.com by kaistizen on 23 Mar 2010 at 1:47

GoogleCodeExporter commented 9 years ago
자주 발생하나요? 음.. race condition 잡으려고 
넣어둔건데..조건이 잘못된건지 좀 확인해봐
야 겠네요

Original comment by joe.j...@gmail.com on 23 Mar 2010 at 2:35

GoogleCodeExporter commented 9 years ago
This issue was updated by revision r403.

qlen 만 0으로 만들도 _IsRunning 을 decrease 하지않은 상태에서 
다른 thread 가 ExecuteAllTasksInQueue 를 호출하면 assert 에 
걸리겠네요 

Original comment by joe.j...@gmail.com on 23 Mar 2010 at 2:41