C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[72287] [질문] AsyncPro 이벤트 발생하지 않는 증상..
돌맹이 [heaven2] 3501 읽음    2015-01-20 19:33
환경: C++ Builder XE5
Component: AsyncPro Serial Component V4.07

AsyncPro Component를 통해 주기적으로 COM Port를 통해 데이터를 주고 받는 프로그램이 있습니다.
약 일주일 정도 운용되면 더이상 AsyncPro의 수신 이벤트가 발생하지 않습니다.
10여년간 이 Component를 써오면서 이런 증상은 처음이네요.
..
처음에는 갈피를 못잡아서 Com Port에서 데이터가 수신될 때마다 로그에 쓰도록 해 놓고
디버그를 해 보니 약 1주일 실행된 후, Com Port에 데이터 요구 패킷를 보낸 후
아무런 응답이 없습니다.
..
프로그램 문제라고 확정하는 것이, 프로그램을 종료 후 다시 실행시키면
정상적으로 AsyncPro Component를 통해 정상적으로 데이터를 받아 옵니다.
..
문제는 이 프로그램이 Memory Leak 증상이 있는 것인데요..
다른 분이 개발한 프로그램인데 운용하다보면 Memory Leak이 발생해
Process Size가 지속적으로 증가합니다. 소스 코드를 보면

TNormalQData *nqData = (TNormalQData*)GlobalAlloc(GPTR, sizeof(TNormalQData));
....
GlobalFree(nqData);


이런 형태로 Heap 영역을 계속 할당 / 해제를 반복합니다.
해제 코드가 들어가 있지만 어딘가에서 구멍이 나 있는 게 아닌가 합니다.

저의 생각은,
Heap 영역을 계속 소모하다가 VCL이 차지하고 있는 영역까지 소모하면서
AsyncPro component의 코드영역까지 침범해서 이런 증상이 나타나는 것이 아닌가 합니다.
그런데, 이런 것이 가능한 가설인 지?

질문 1: Component가 동작하다가 자신의 동작을 하지 않을 때 어떤 것을 의심해 보아야 할 지?
         (현 상황에서는 AsyncPro Component가 특정 시점이 되면 아무런 동작을 하지 않는 것 같습니다.)

질문 2: Heap 영역을 GlobalAlloc()등으로 계속 소모할 경우 VCL Component가 가지고 있는 메모리 영역까지 침범할 수 있는 지?

이 버그.. 난감합니다.

고수님들의 조언을 바랍니다.

감사합니다.

+ -

관련 글 리스트
72287 [질문] AsyncPro 이벤트 발생하지 않는 증상.. 돌맹이 3501 2015/01/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.