]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[WINVERBS] Fix a memory leak. We need to free the port array, which is allocated...
authorstansmith <stansmith@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 29 Aug 2009 00:39:47 +0000 (00:39 +0000)
committerstansmith <stansmith@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 29 Aug 2009 00:39:47 +0000 (00:39 +0000)
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1@2392 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/WOF2-1/core/winverbs/kernel/wv_device.c

index cd97ae05a692bb1acde6f8a6fdf67d6d8d7751be..9e2de59e0b579f51abb879636179ed718dea407f 100644 (file)
@@ -187,7 +187,7 @@ static ib_ca_attr_t *WvQueryCaAttributes(WV_DEVICE *pDevice)
        ib_status = pDevice->pVerbs->query_ca(pDevice->pDevice->hDevice, attr,\r
                                                                                  &size, NULL);\r
        if (ib_status != IB_SUCCESS) {\r
-               ExFreePool(attr);\r
+               ExFreePoolWithTag(attr, 'acvw');\r
                attr = NULL;\r
        }\r
 \r
@@ -208,7 +208,7 @@ static NTSTATUS WvDeviceCreatePorts(WV_DEVICE *pDevice)
        }\r
 \r
        pDevice->PortCount = attr->num_ports;\r
-       ExFreePool(attr);\r
+       ExFreePoolWithTag(attr, 'acvw');\r
 \r
        pDevice->pPorts = ExAllocatePoolWithTag(NonPagedPool, sizeof(WV_PORT) *\r
                                                                                        pDevice->PortCount, 'cpvw');\r
@@ -367,6 +367,9 @@ static void WvDeviceFreePorts(WV_DEVICE *pDevice)
                WdfIoQueuePurgeSynchronously(pDevice->pPorts[i].Queue);\r
                WdfObjectDelete(pDevice->pPorts[i].Queue);\r
        }\r
+       if (pDevice->pPorts != NULL) {\r
+               ExFreePoolWithTag(pDevice->pPorts, 'cpvw');\r
+       }\r
 }\r
 \r
 void WvDeviceFree(WV_DEVICE *pDevice)\r
@@ -385,7 +388,7 @@ void WvDeviceFree(WV_DEVICE *pDevice)
 \r
        WvDeviceFreePorts(pDevice);\r
        WvProviderPut(pDevice->pProvider);\r
-       ExFreePool(pDevice);\r
+       ExFreePoolWithTag(pDevice, 'cdvw');\r
 }\r
 \r
 void WvDeviceRemoveHandler(WV_DEVICE *pDevice)\r
@@ -573,7 +576,7 @@ void WvDeviceQuery(WV_PROVIDER *pProvider, WDFREQUEST Request)
 \r
        WvConvertDevAttr(attr, ca_attr);\r
        outlen = sizeof(WV_IO_DEVICE_ATTRIBUTES);\r
-       ExFreePool(ca_attr);\r
+       ExFreePoolWithTag(ca_attr, 'acvw');\r
 \r
 complete:\r
        WdfRequestCompleteWithInformation(Request, status, outlen);\r
@@ -622,7 +625,7 @@ void WvDevicePortQuery(WV_PROVIDER *pProvider, WDFREQUEST Request)
        outlen = sizeof(WV_IO_PORT_ATTRIBUTES);\r
 \r
 free:\r
-       ExFreePool(ca_attr);\r
+       ExFreePoolWithTag(ca_attr, 'acvw');\r
 complete:\r
        WdfRequestCompleteWithInformation(Request, status, outlen);\r
 }\r
@@ -678,7 +681,7 @@ void WvDeviceGidQuery(WV_PROVIDER *pProvider, WDFREQUEST Request)
        }\r
 \r
 free:\r
-       ExFreePool(ca_attr);\r
+       ExFreePoolWithTag(ca_attr, 'acvw');\r
 complete:\r
        WdfRequestCompleteWithInformation(Request, status, outlen);\r
 }\r
@@ -734,7 +737,7 @@ void WvDevicePkeyQuery(WV_PROVIDER *pProvider, WDFREQUEST Request)
        }\r
 \r
 free:\r
-       ExFreePool(ca_attr);\r
+       ExFreePoolWithTag(ca_attr, 'acvw');\r
 complete:\r
        WdfRequestCompleteWithInformation(Request, status, outlen);\r
 }\r