#include "smartcard_main.h"
-static void smartcard_free(DEVICE* dev)
+static void smartcard_free(DEVICE* device)
{
- IRP* irp;
- COMPLETIONIDINFO* CompletionIdInfo;
- SMARTCARD_DEVICE* smartcard = (SMARTCARD_DEVICE*) dev;
+ SMARTCARD_DEVICE* smartcard = (SMARTCARD_DEVICE*) device;
- printf("smartcard_free\n");
-
- SetEvent(smartcard->stopEvent);
+ MessageQueue_PostQuit(smartcard->IrpQueue, 0);
WaitForSingleObject(smartcard->thread, INFINITE);
- while ((irp = (IRP*) InterlockedPopEntrySList(smartcard->pIrpList)) != NULL)
- irp->Discard(irp);
-
- _aligned_free(smartcard->pIrpList);
-
- /* Begin TS Client defect workaround. */
-
- while ((CompletionIdInfo = (COMPLETIONIDINFO*) list_dequeue(smartcard->CompletionIds)) != NULL)
- free(CompletionIdInfo);
-
CloseHandle(smartcard->thread);
- CloseHandle(smartcard->irpEvent);
- CloseHandle(smartcard->stopEvent);
- CloseHandle(smartcard->CompletionIdsMutex);
Stream_Free(smartcard->device.data, TRUE);
- list_free(smartcard->CompletionIds);
-
- /* End TS Client defect workaround. */
- free(dev);
+ free(device);
}
static void smartcard_process_irp(SMARTCARD_DEVICE* smartcard, IRP* irp)