[HalfNetwork] Server 종료시 Memory leak 관련 문의

233 views
Skip to first unread message

berry

unread,
Jan 10, 2012, 7:40:36 PM1/10/12
to HalfNetwork
HalfNetwork를 이용하여 Server 제작중입니다.

개발 환경은 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

YoungGi Lim

unread,
Jan 11, 2012, 10:11:51 AM1/11/12
to halfn...@googlegroups.com
체크를 해보도록 하겠습니다.

리포트에 감사드립니다.

2012/1/11 berry <kutb...@gmail.com>

berry

unread,
Jan 12, 2012, 9:06:26 PM1/12/12
to HalfNetwork

바쁘신 과중에 관련 요청 드린점 양해 바랍니다.

체크 하신 후 결과에 대해서 회신 주시면 감사하겠습니다.

이상입니다.

On 1월12일, 오전12시11분, YoungGi Lim <javawor...@gmail.com> wrote:
> 체크를 해보도록 하겠습니다.
>
> 리포트에 감사드립니다.
>

> 2012/1/11 berry <kutbe...@gmail.com>

> > #endif- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -

berry

unread,
Jan 16, 2012, 11:58:56 PM1/16/12
to HalfNetwork

위 현상에 대한 분석 내용 입니다.

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 메모리
의 해제가 필요 할 것으로 보입니다.

관련 답변 주시면 감사하겠습니다.

이상입니다.

> > - 원본 텍스트 보기 -- 원본 텍스트 숨기기 -

YoungGi Lim

unread,
Jan 17, 2012, 1:00:43 AM1/17/12
to halfn...@googlegroups.com
해당 상황에서는 명시적인 메모리의 해제가 필요한 것 같습니다.

자세한 설명 감사드리고 반영해서 업데이트 하도록 하겠습니다.


2012/1/17 berry <kutb...@gmail.com>

berry

unread,
Mar 11, 2012, 8:41:06 PM3/11/12
to HalfNetwork
해당 momory leak 현상은 proactor thread 종료된 후 accept close가 호출됨으로

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>

Reply all
Reply to author
Forward
0 new messages