[USBEHCI][USBOHCI][USBUHCI]
authorThomas Faber <thomas.faber@reactos.org>
Fri, 31 Mar 2017 09:16:45 +0000 (09:16 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Fri, 31 Mar 2017 09:16:45 +0000 (09:16 +0000)
- Avoid leaking CUSBRequest::m_CompletionEvent. Based on a patch by ReactCoder.
CORE-12984 #resolve

svn path=/trunk/; revision=74246

reactos/drivers/usb/usbehci/usb_request.cpp
reactos/drivers/usb/usbohci/usb_request.cpp
reactos/drivers/usb/usbuhci/usb_request.cpp

index 1df7faf..39c58f4 100644 (file)
@@ -56,8 +56,8 @@ public:
     VOID DumpQueueHead(IN PQUEUE_HEAD QueueHead);
 
     // constructor / destructor
-    CUSBRequest(IUnknown *OuterUnknown){}
-    virtual ~CUSBRequest(){}
+    CUSBRequest(IUnknown *OuterUnknown);
+    virtual ~CUSBRequest();
 
 protected:
     LONG m_Ref;
@@ -137,6 +137,22 @@ protected:
 
 };
 
+//----------------------------------------------------------------------------------------
+CUSBRequest::CUSBRequest(IUnknown *OuterUnknown) :
+    m_CompletionEvent(NULL)
+{
+    UNREFERENCED_PARAMETER(OuterUnknown);
+}
+
+//----------------------------------------------------------------------------------------
+CUSBRequest::~CUSBRequest()
+{
+    if (m_CompletionEvent != NULL)
+    {
+        ExFreePoolWithTag(m_CompletionEvent, TAG_USBEHCI);
+    }
+}
+
 //----------------------------------------------------------------------------------------
 NTSTATUS
 STDMETHODCALLTYPE
index 355edf0..1531306 100644 (file)
@@ -59,10 +59,9 @@ public:
     NTSTATUS BuildTransferDescriptorChain(IN PVOID TransferBuffer, IN ULONG TransferBufferLength, IN UCHAR PidCode, OUT POHCI_GENERAL_TD * OutFirstDescriptor, OUT POHCI_GENERAL_TD * OutLastDescriptor, OUT PULONG OutTransferBufferOffset);
     VOID InitDescriptor(IN POHCI_GENERAL_TD CurrentDescriptor, IN PVOID TransferBuffer, IN ULONG TransferBufferLength, IN UCHAR PidCode);
 
-
     // constructor / destructor
-    CUSBRequest(IUnknown *OuterUnknown){}
-    virtual ~CUSBRequest(){}
+    CUSBRequest(IUnknown *OuterUnknown);
+    virtual ~CUSBRequest();
 
 protected:
     LONG m_Ref;
@@ -145,6 +144,22 @@ protected:
     PVOID m_Base;
 };
 
+//----------------------------------------------------------------------------------------
+CUSBRequest::CUSBRequest(IUnknown *OuterUnknown) :
+    m_CompletionEvent(NULL)
+{
+    UNREFERENCED_PARAMETER(OuterUnknown);
+}
+
+//----------------------------------------------------------------------------------------
+CUSBRequest::~CUSBRequest()
+{
+    if (m_CompletionEvent != NULL)
+    {
+        ExFreePoolWithTag(m_CompletionEvent, TAG_USBOHCI);
+    }
+}
+
 //----------------------------------------------------------------------------------------
 NTSTATUS
 STDMETHODCALLTYPE
index db5ebcb..0b667b6 100644 (file)
@@ -54,11 +54,9 @@ public:
     VOID FreeDescriptor(IN PUHCI_TRANSFER_DESCRIPTOR Descriptor);
     NTSTATUS BuildTransferDescriptorChain(IN PVOID TransferBuffer, IN ULONG TransferBufferLength, IN UCHAR PidCode, IN UCHAR InitialDataToggle, OUT PUHCI_TRANSFER_DESCRIPTOR * OutFirstDescriptor, OUT PUHCI_TRANSFER_DESCRIPTOR * OutLastDescriptor, OUT PULONG OutTransferBufferOffset, OUT PUCHAR OutDataToggle);
 
-
-
     // constructor / destructor
-    CUSBRequest(IUnknown *OuterUnknown){}
-    virtual ~CUSBRequest(){}
+    CUSBRequest(IUnknown *OuterUnknown);
+    virtual ~CUSBRequest();
 
 protected:
     LONG m_Ref;
@@ -135,6 +133,22 @@ protected:
 
 };
 
+//----------------------------------------------------------------------------------------
+CUSBRequest::CUSBRequest(IUnknown *OuterUnknown) :
+    m_CompletionEvent(NULL)
+{
+    UNREFERENCED_PARAMETER(OuterUnknown);
+}
+
+//----------------------------------------------------------------------------------------
+CUSBRequest::~CUSBRequest()
+{
+    if (m_CompletionEvent != NULL)
+    {
+        ExFreePoolWithTag(m_CompletionEvent, TAG_USBUHCI);
+    }
+}
+
 //----------------------------------------------------------------------------------------
 NTSTATUS
 STDMETHODCALLTYPE