]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
winverbs/cq: destroy IoQueue
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 1 May 2008 03:44:28 +0000 (03:44 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 1 May 2008 03:44:28 +0000 (03:44 +0000)
We need to cleanup the IoQueue when destroying the CQ.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1@1100 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/winverbs/core/winverbs/kernel/wv_cq.c

index aea525a0df27e2af411754fe519bda3ed3349a5f..cc8b521983641835bae601e2d836916e3cd7239a 100644 (file)
@@ -112,7 +112,7 @@ static NTSTATUS WvCqAlloc(WV_DEVICE *pDevice, UINT32 *pSize,
        status = WdfIoQueueCreate(ControlDevice, &config,\r
                                                          WDF_NO_OBJECT_ATTRIBUTES, &cq->Queue);\r
        if (!NT_SUCCESS(status)) {\r
-               goto err;\r
+               goto err1;\r
        }\r
 \r
        ib_status = pDevice->pVerbs->create_cq(pDevice->hVerbsDevice, cq,\r
@@ -120,14 +120,16 @@ static NTSTATUS WvCqAlloc(WV_DEVICE *pDevice, UINT32 *pSize,
                                                                                   pSize, &cq->hVerbsCq, pVerbsData);\r
        if (ib_status != IB_SUCCESS) {\r
                status = STATUS_UNSUCCESSFUL;\r
-               goto err;\r
+               goto err2;\r
        }\r
 \r
        cq->pVerbs = pDevice->pVerbs;\r
        *ppCq = cq;\r
        return STATUS_SUCCESS;\r
 \r
-err:\r
+err2:\r
+       WdfObjectDelete(cq->Queue);\r
+err1:\r
        ExFreePool(cq);\r
        return status;\r
 }\r
@@ -230,6 +232,8 @@ void WvCqFree(WV_COMPLETION_QUEUE *pCq)
                pCq->pVerbs->destroy_cq(pCq->hVerbsCq);\r
        }\r
 \r
+       WdfIoQueuePurgeSynchronously(pCq->Queue);\r
+       WdfObjectDelete(pCq->Queue);\r
        WvDevicePut(pCq->pDevice);\r
        ExFreePool(pCq);\r
 }\r