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
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
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