fix mem-leaking when USB enumeration

This commit is contained in:
gb 2023-08-11 11:09:12 +08:00
parent e3a9ead2e4
commit eeb68ac561
3 changed files with 24 additions and 4 deletions

View File

@ -123,6 +123,7 @@ DriverNameToDeviceInst(
{ {
done = TRUE; done = TRUE;
*pDevInfo = deviceInfo; *pDevInfo = deviceInfo;
deviceInfo = INVALID_HANDLE_VALUE;
CopyMemory(pDevInfoData, &deviceInfoData, sizeof(deviceInfoData)); CopyMemory(pDevInfoData, &deviceInfoData, sizeof(deviceInfoData));
FREE(buf); FREE(buf);
break; break;
@ -137,7 +138,7 @@ DriverNameToDeviceInst(
Done: Done:
if (bResult == FALSE) //if (bResult == FALSE)
{ {
if (deviceInfo != INVALID_HANDLE_VALUE) if (deviceInfo != INVALID_HANDLE_VALUE)
{ {

View File

@ -3807,7 +3807,16 @@ void free_usb_device_info(PUSBDEVICEINFO pudi)
if (pudi->ConfigDesc) if (pudi->ConfigDesc)
FREE(pudi->ConfigDesc); FREE(pudi->ConfigDesc);
if (pudi->StringDescs) if (pudi->StringDescs)
{
PSTRING_DESCRIPTOR_NODE next = pudi->StringDescs->Next;
FREE(pudi->StringDescs); FREE(pudi->StringDescs);
while (next)
{
pudi->StringDescs = next;
next = pudi->StringDescs->Next;
FREE(pudi->StringDescs);
}
}
if (pudi->BosDesc) if (pudi->BosDesc)
FREE(pudi->BosDesc); FREE(pudi->BosDesc);
if (pudi->ConnectionInfoV2) if (pudi->ConnectionInfoV2)

View File

@ -96,11 +96,11 @@ Revision History:
#else #else
#define ALLOC(dwBytes) GlobalAlloc(GPTR,(dwBytes)) #define ALLOC(dwBytes) allocate_mem(dwBytes) // GlobalAlloc(GPTR,(dwBytes))
#define REALLOC(hMem, dwBytes) GlobalReAlloc((hMem), (dwBytes), (GMEM_MOVEABLE|GMEM_ZEROINIT)) //#define REALLOC(hMem, dwBytes) GlobalReAlloc((hMem), (dwBytes), (GMEM_MOVEABLE|GMEM_ZEROINIT))
#define FREE(hMem) GlobalFree((hMem)) #define FREE(hMem) free(hMem) // GlobalFree((hMem))
#define CHECKFORLEAKS() #define CHECKFORLEAKS()
@ -111,6 +111,16 @@ Revision History:
#define STR_INVALID_POWER_STATE "(invalid state) " #define STR_INVALID_POWER_STATE "(invalid state) "
#define STR_UNKNOWN_CONTROLLER_FLAVOR "Unknown" #define STR_UNKNOWN_CONTROLLER_FLAVOR "Unknown"
FORCEINLINE void* allocate_mem(size_t len)
{
void* mem = malloc(len);
if (mem)
memset(mem, 0, len);
return mem;
}
FORCEINLINE FORCEINLINE
VOID VOID
InitializeListHead( InitializeListHead(