Hi Robert,
On Wednesday 04 January 2006 06:32, Robert Reif wrote:
> Can you try this patch:
> http://bugs.winehq.org/attachment.cgi?id=1523&action=view
> <http://bugs.winehq.org/attachment.cgi?id=1523&action=view>
>
> It tries to catch the exception in the arts library. This is just a
> hack to work around a bug in the arts library.
It fixes the problem for me. Would be nice if this could go into CVS, even if
it is just a hack. I guess it crashes on any Debian Sarge setup?
Your patch is missing an ntdll import. I've attached an updated version.
Bye,
--
Michael Jung
[EMAIL PROTECTED]
Index: dlls/winmm/winearts/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/winmm/winearts/Makefile.in,v
retrieving revision 1.9
diff -u -p -r1.9 Makefile.in
--- dlls/winmm/winearts/Makefile.in 27 Jan 2004 20:16:39 -0000 1.9
+++ dlls/winmm/winearts/Makefile.in 4 Jan 2006 07:15:49 -0000
@@ -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
Index: dlls/winmm/winearts/audio.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/winearts/audio.c,v
retrieving revision 1.32
diff -u -p -r1.32 audio.c
--- dlls/winmm/winearts/audio.c 10 Nov 2005 12:14:56 -0000 1.32
+++ dlls/winmm/winearts/audio.c 4 Jan 2006 07:15:50 -0000
@@ -57,6 +57,8 @@
#include "dsdriver.h"
#include "arts.h"
#include "wine/unicode.h"
+#include "wine/exception.h"
+#include "excpt.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(wave);
@@ -383,6 +385,14 @@ LONG ARTS_WaveClose(void)
return 1;
}
+/* filter for page-fault exceptions */
+static WINE_EXCEPTION_FILTER(page_fault)
+{
+ if (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
+ return EXCEPTION_EXECUTE_HANDLER;
+ return EXCEPTION_CONTINUE_SEARCH;
+}
+
/******************************************************************
* ARTS_WaveInit
*
@@ -395,11 +405,20 @@ LONG ARTS_WaveInit(void)
TRACE("called\n");
- if ((errorcode = ARTS_Init()) < 0)
+ __TRY
+ {
+ if ((errorcode = ARTS_Init()) < 0)
+ {
+ WARN("arts_init() failed (%d)\n", errorcode);
+ return -1;
+ }
+ }
+ __EXCEPT(page_fault)
{
- WARN("arts_init() failed (%d)\n", errorcode);
- return -1;
+ ERR("arts_init() crashed\n");
+ return -1;
}
+ __ENDTRY
/* initialize all device handles to -1 */
for (i = 0; i < MAX_WAVEOUTDRV; ++i)