개발 환경은 Win7 64bit , VC10 이며 개발 중하기와 같은 현상이 발생하여 문의 드립니다.
서버 종료시 ( Pluse , Close , Destory ) 메모리 누수가 보고 됩니다.
의심 지점은 bool ProactorAcceptor::StartListen() 의 _acceptor.open 이며
_initialAcceptcount의 갯수 만큼 특정 패턴으로 메모리 누수가 일어 납니다.
HalfNetwork의 TestServer 소스에서도 동일한 현상이 발생 됩니다.
-TestServer 의 메모리 누수 체크를 위해 아래 코드를 삽입 했습니다.
#define _AFXDLL
#include <afxwin.h> // MFC core and standard components
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
체크 하신 후 결과에 대해서 회신 주시면 감사하겠습니다.
이상입니다.
On 1월12일, 오전12시11분, YoungGi Lim <javawor...@gmail.com> wrote:
> 체크를 해보도록 하겠습니다.
>
> 리포트에 감사드립니다.
>
> 2012/1/11 berry <kutbe...@gmail.com>
> > #endif- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -
1. ACE_Asynch_Acceptor::open시 _initialAcceptcount 만큼의 message_block 과
ACE_WIN32_Asynch_Accept_Result 포인터가 생성. ( AcceptEx::lpOverlapped )
2. 생성된 message block 및 ACE_WIN32_Asynch_Accept_Result 메모리는
ACE_Asynch_Acceptor::handle_accept 에서 삭제 됨.
3. 따라서 클라이언트의 접속이 이루어 지지 않거나 또는 reissue_accept 1로 설정 되어 있으면
initialAcceptcount ( message_block , ACE_WIN32_Asynch_Accept_Result ) 만
큼의 메모리 릭이 발생.
4. CustomAsynchAcceptor 에서 종료시 should_reissue_accept(0) 호출 및 AcceptEx
pending 되어 있는 AIO의 message block 및 ACE_WIN32_Asynch_Accept_Result 메모리
의 해제가 필요 할 것으로 보입니다.
관련 답변 주시면 감사하겠습니다.
이상입니다.
> > - 원본 텍스트 보기 -- 원본 텍스트 숨기기 -
cancel io에 대해서 release 하지 못하는 문제로 보입니다.
따라서 accept close 후 proactor thread 종료로 변경시 해당 leak은 발생하지 않습니다.
감사합니다.
On 1월17일, 오후3시00분, YoungGi Lim <javawor...@gmail.com> wrote:
> 해당 상황에서는 명시적인 메모리의 해제가 필요한 것 같습니다.
>
> 자세한 설명 감사드리고 반영해서 업데이트 하도록 하겠습니다.
>
> 2012/1/17 berry <kutbe...@gmail.com>