Eric Pouech : winmm: driver unloading.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 5 08:54:10 CST 2005


Module: wine
Branch: refs/heads/master
Commit: 60884fc3b33a152277a15568dcccd5abe99ac530
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=60884fc3b33a152277a15568dcccd5abe99ac530

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Mon Dec  5 12:01:26 2005 +0100

winmm: driver unloading.
- properly handle drivers unloading when no session instance of the
  driver has been created

---

 dlls/winmm/driver.c |    8 ++++++--
 dlls/winmm/winemm.h |    7 +++++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/dlls/winmm/driver.c b/dlls/winmm/driver.c
index dabce42..717ba47 100644
--- a/dlls/winmm/driver.c
+++ b/dlls/winmm/driver.c
@@ -291,6 +291,7 @@ LPWINE_DRIVER	DRIVER_TryOpenDriver32(LPC
             cause = "load1 failed";
             goto exit;
         }
+        lpDrv->dwFlags |= WINE_GDF_SESSION;
         return ret;
     }
 
@@ -416,8 +417,11 @@ LRESULT WINAPI CloseDriver(HDRVR hDrvr, 
             {
                 LPWINE_DRIVER       lpDrv0;
 
+                if (lpDrv->dwFlags & WINE_GDF_SESSION)
+                    FIXME("Shouldn't happen (%p)\n", lpDrv);
                 /* if driver has an opened session instance, we have to close it too */
-                if (DRIVER_GetNumberOfModuleRefs(lpDrv->d.d32.hModule, &lpDrv0) == 1)
+                if (DRIVER_GetNumberOfModuleRefs(lpDrv->d.d32.hModule, &lpDrv0) == 1 &&
+                    (lpDrv0->dwFlags & WINE_GDF_SESSION))
                 {
                     DRIVER_SendMessage(lpDrv0, DRV_CLOSE, 0L, 0L);
                     lpDrv0->d.d32.dwDriverID = 0;
@@ -456,7 +460,7 @@ DWORD	WINAPI GetDriverFlags(HDRVR hDrvr)
     TRACE("(%p)\n", hDrvr);
 
     if ((lpDrv = DRIVER_FindFromHDrvr(hDrvr)) != NULL) {
-	ret = WINE_GDF_EXIST | lpDrv->dwFlags;
+	ret = WINE_GDF_EXIST | (lpDrv->dwFlags & WINE_GDF_EXTERNAL_MASK);
     }
     return ret;
 }
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index 4725359..3295199 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -306,8 +306,11 @@ extern  unsigned        (*pFnLoadMMDrvFu
 extern  LRESULT         (*pFnMmioCallback16)(DWORD,LPMMIOINFO,UINT,LPARAM,LPARAM);
 extern  void            (WINAPI *pFnReleaseThunkLock)(DWORD*);
 extern  void            (WINAPI *pFnRestoreThunkLock)(DWORD);
+
 /* GetDriverFlags() returned bits is not documented (nor the call itself)
  * Here are Wine only definitions of the bits
  */
-#define WINE_GDF_EXIST	0x80000000
-#define WINE_GDF_16BIT	0x10000000
+#define WINE_GDF_EXIST	        0x80000000
+#define WINE_GDF_16BIT	        0x10000000
+#define WINE_GDF_EXTERNAL_MASK  0xF0000000
+#define WINE_GDF_SESSION        0x00000001




More information about the wine-cvs mailing list