Memory Leak with IcmpSendEcho ?
Comfused... Please help
I am trying to check the network status in the 'thread' with
IcmpSendEcho function.
Here is my sample code;
// PingLeak.cpp
//
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <icmpapi.h>
#include <process.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
// Thread Stopper
BOOL bStopThread = FALSE;
void SendPing()
{
char SendData[32] = "SendData";
const DWORD dwReplySize = (sizeof (ICMP_ECHO_REPLY)) + sizeof
(SendData);
BYTE* pReplyBuffer = new BYTE[dwReplySize];
memset(pReplyBuffer, 0, dwReplySize);
ULONG ipaddr = inet_addr("127.0.0.1");
HANDLE hIcmpFile = IcmpCreateFile();
DWORD dwReturn = IcmpSendEcho(hIcmpFile, ipaddr, SendData,
sizeof(SendData), NULL, (LPVOID)pReplyBuffer, dwReplySize, 1000);
delete [] pReplyBuffer;
IcmpCloseHandle(hIcmpFile);
return;
}
unsigned __stdcall PingThreadFunc(void* pArgument)
{
while (!bStopThread)
{
SendPing();
printf("SendPing\n");
Sleep(100);
}
_endthreadex(0);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwThreadId = 0;
HANDLE hPingThread = (HANDLE)_beginthreadex(NULL, 0, (unsigned int
(__stdcall *)(void *))PingThreadFunc, NULL, 0, (unsigned
int*)&dwThreadId);
Sleep(3*60*60*1000); // wait for 3 hours
if (NULL != hPingThread)
{
DWORD dwWait = WaitForSingleObject(hPingThread, 20000);
if (WAIT_OBJECT_0 == dwWait)
CloseHandle(hPingThread);
}
return 0;
}
------------------------------------------
When running this program, PrivateBytes of this process in taskmanager
increase continuously.
I tested running sample for 2 days, but the memory leaking found.
Strange to say, memory leaking repro in Windows 7 only.
I already know some issue that published by Microsoft,
http://support.microsoft.com/kb/2384321
But a example in above page is different with my sample.
Can anyone help me solve this issue ?