Sebastian Lackner : winedevice: Avoid memory leak when driver cannot be unloaded.

Alexandre Julliard julliard at winehq.org
Mon Aug 29 11:07:23 CDT 2016


Module: wine
Branch: master
Commit: 09f9986ea1270ae43c9ff606592caf8c111259c8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=09f9986ea1270ae43c9ff606592caf8c111259c8

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Mon Aug 29 13:50:34 2016 +0200

winedevice: Avoid memory leak when driver cannot be unloaded.

Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/winedevice/device.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/programs/winedevice/device.c b/programs/winedevice/device.c
index e1a38a4..5011e4f 100644
--- a/programs/winedevice/device.c
+++ b/programs/winedevice/device.c
@@ -478,7 +478,13 @@ static NTSTATUS create_driver( const WCHAR *driver_name )
 
 static void wine_drivers_rb_destroy( struct wine_rb_entry *entry, void *context )
 {
-    unload_driver( entry, TRUE );
+    if (unload_driver( entry, TRUE ) != STATUS_SUCCESS)
+    {
+        struct wine_driver *driver = WINE_RB_ENTRY_VALUE( entry, struct wine_driver, entry );
+        ObDereferenceObject( driver->driver_obj );
+        CloseServiceHandle( (void *)driver->handle );
+        HeapFree( GetProcessHeap(), 0, driver );
+    }
 }
 
 static void WINAPI async_shutdown_drivers( PTP_CALLBACK_INSTANCE instance, void *context )




More information about the wine-cvs mailing list