Robert Reif : winearts: Try to keep winecfg from crashing by recovering from an arts

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jan 23 10:35:20 CST 2006


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

Author: Robert Reif <reif at earthlink.net>
Date:   Mon Jan 23 16:48:45 2006 +0100

winearts: Try to keep winecfg from crashing by recovering from an arts
library crash.

---

 dlls/winmm/winearts/Makefile.in |    2 +-
 dlls/winmm/winearts/audio.c     |   20 +++++++++++++++++---
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/dlls/winmm/winearts/Makefile.in b/dlls/winmm/winearts/Makefile.in
index dba0062..f277c83 100644
--- a/dlls/winmm/winearts/Makefile.in
+++ b/dlls/winmm/winearts/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = winearts.drv
-IMPORTS   = winmm user32 kernel32
+IMPORTS   = winmm user32 kernel32 ntdll
 EXTRAINCL = @ARTSINCL@
 EXTRALIBS = @ARTSLIBS@ -ldxguid -luuid
 
diff --git a/dlls/winmm/winearts/audio.c b/dlls/winmm/winearts/audio.c
index ea5c5ca..9b5c10b 100644
--- a/dlls/winmm/winearts/audio.c
+++ b/dlls/winmm/winearts/audio.c
@@ -57,6 +57,7 @@
 #include "dsdriver.h"
 #include "arts.h"
 #include "wine/unicode.h"
+#include "wine/exception.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(wave);
@@ -392,14 +393,27 @@ LONG ARTS_WaveInit(void)
 {
     int 	i;
     int		errorcode;
+    LONG	ret = 0;
 
     TRACE("called\n");
 
-    if ((errorcode = ARTS_Init()) < 0)
+    __TRY
     {
-	WARN("arts_init() failed (%d)\n", errorcode);
-	return -1;
+        if ((errorcode = ARTS_Init()) < 0)
+        {
+            WARN("arts_init() failed (%d)\n", errorcode);
+            ret = -1;
+        }
     }
+    __EXCEPT_PAGE_FAULT
+    {
+        ERR("arts_init() crashed\n");
+        ret = -1;
+    }
+    __ENDTRY
+
+    if (ret)
+        return ret;
 
     /* initialize all device handles to -1 */
     for (i = 0; i < MAX_WAVEOUTDRV; ++i)




More information about the wine-cvs mailing list