Subject: Re: pkg/28924: game/exult pthread assertion failure on NetBSD -current
To: None <pkg-manager@NetBSD.org, gnats-admin@NetBSD.org,>
From: Nicolas Joly <njoly@pasteur.fr>
List: pkgsrc-bugs
Date: 01/11/2005 13:33:40
--4Ckj6UjgE2iN1+kY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, Jan 09, 2005 at 09:51:00PM +0000, Nicolas Joly wrote:
> >Number:         28924
> >Category:       pkg
> >Synopsis:       game/exult pthread assertion failure on NetBSD -current
> >Confidential:   no
> >Severity:       serious
> >Priority:       medium
> >Responsible:    pkg-manager
> >State:          open
> >Class:          sw-bug
> >Submitter-Id:   net
> >Arrival-Date:   Sun Jan 09 21:51:00 +0000 2005
> >Originator:     Nicolas Joly
> >Release:        NetBSD 2.99.12
> >Organization:
> Institut Pasteur, Paris.
> >Environment:
> System: NetBSD cixy.dial.pasteur.fr 2.99.12 NetBSD 2.99.12 (CIXY) #6: Thu Jan 6 22:19:55 CET 2005 njoly@cixy.dial.pasteur.fr:/local/src/NetBSD/obj/i386/sys/arch/i386/compile/CIXY i386
> Architecture: i386
> Machine: i386
> >Description:
> While running exult on -current NetBSD/i386 (or NetBSD/amd64), i'm seeing many
> pthread assertions failures :
> 
> njoly@cixy [~/Ultima7Vf]> exult 
> Exult version 1.2
> Built at: Jan  9 2005 15:21:09
> Compile-time options: USE_EXULTSTUDIO, HAVE_ZIP_SUPPORT
> Compiler: gcc, version: 3.3.3 (NetBSD nb3 20040520)
> 
> Platform: Unknown
> Exult path settings:
> Data          : /usr/pkg/share/exult
> Digital music : /usr/pkg/share/exult/music
> 
> Music player: Internal cheapass forked midi player
> Black Gate   : found
> exult_bg.flx : found
> Serpent Isle : not found (static/sispeech.spc)
> exult_si.flx : found
> Starting forked player failed
> assertion "unreachable" failed: file "/local/src/NetBSD/src/lib/libpthread/pthread.c", line 523, function "pthread__idle"
> [...]
> 
> Then, the system becomes unresponsive until the `exult.core' file is
> generated (about 770MB).
> 
> I tracked down this problem, and noticed that exult program depend on a
> missing `playmidi' command to play MIDI files :
> http://sourceforge.net/projects/playmidi/
> But i failed to make it work on NetBSD.
> 
> As a workaround for NetBSD, i patched `audio/midi_drivers/forked_player.cc'
> to use native command `midiplay' instead.

Currently, `midiplay' output is horrible on my machines ... i took a
little more time to look at this.

I noticed that some MIDI drivers can be disable at compile time
(OpenBSD does already do this). I made another set of patch that will
handle this situation a lot better.

While here, i noticed that exult has some support for `timidity'
player if detected. But exult does not use timidity directly, but
expect SDL_mixer to be compiled with. As pkgsrc SDL_mixer has no
timidity support, the resulting binary cannot play music. In that
case, we need to disable timidity at config time :

CONFIGURE_ARGS+=        --disable-timidity

Hope this helps,
Regards.

-- 
Nicolas Joly

Biological Software and Databanks.
Institut Pasteur, Paris.

--4Ckj6UjgE2iN1+kY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="pkgsrc-exult.diff"

--- configure.ac.orig	2004-06-09 08:20:00.000000000 +0200
+++ configure.ac	2005-01-11 00:11:46.000000000 +0100
@@ -104,6 +104,12 @@
 		AC_MSG_RESULT(X11 (FreeBSD))
 		CXXFLAGS="$CXXFLAGS -I/usr/X11R6/include"
 		;;
+	netbsd* )
+		WINDOWING_SYSTEM="-DXWIN"
+		AC_DEFINE(NETBSD, 1, [Using NetBSD])
+		AC_MSG_RESULT(X11 (NetBSD))
+		CXXFLAGS="$CXXFLAGS -I/usr/X11R6/include"
+		;;
 	solaris* )
 		WINDOWING_SYSTEM="-DXWIN"
 		AC_MSG_RESULT(X11 (Solaris))
--- configure.orig	2004-06-09 08:28:39.000000000 +0200
+++ configure	2005-01-11 00:12:43.000000000 +0100
@@ -2024,6 +2024,17 @@
 echo "${ECHO_T}X11 (FreeBSD)" >&6
 		CXXFLAGS="$CXXFLAGS -I/usr/X11R6/include"
 		;;
+	netbsd* )
+		WINDOWING_SYSTEM="-DXWIN"
+
+cat >>confdefs.h <<\_ACEOF
+#define NETBSD 1
+_ACEOF
+
+		echo "$as_me:$LINENO: result: X11 (NetBSD)" >&5
+echo "${ECHO_T}X11 (NetBSD)" >&6
+		CXXFLAGS="$CXXFLAGS -I/usr/X11R6/include"
+		;;
 	solaris* )
 		WINDOWING_SYSTEM="-DXWIN"
 		echo "$as_me:$LINENO: result: X11 (Solaris)" >&5
@@ -5937,7 +5948,7 @@
 case $host in
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 5940 "configure"' > conftest.$ac_ext
+  echo '#line 5951 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -6484,7 +6495,7 @@
 save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
 compiler_c_o=no
-if { (eval echo configure:6487: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+if { (eval echo configure:6498: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
   # The compiler can only warn and ignore the option if not recognized
   # So say no if there are warnings
   if test -s out/conftest.err; then
@@ -7675,7 +7686,7 @@
   libsuff=
   case "$host_cpu" in
   x86_64*)
-    echo '#line 7678 "configure"' > conftest.$ac_ext
+    echo '#line 7689 "configure"' > conftest.$ac_ext
     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -8347,7 +8358,7 @@
     lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 8350 "configure"
+#line 8361 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -8445,7 +8456,7 @@
     lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 8448 "configure"
+#line 8459 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
--- config.h.in.orig	2004-03-30 06:32:22.000000000 +0200
+++ config.h.in	2005-01-11 00:12:43.000000000 +0100
@@ -174,6 +174,9 @@
 /* Using MacOSX */
 #undef MACOSX
 
+/* Using NetBSD */
+#undef NETBSD
+
 /* Disable SDL parachute */
 #undef NO_SDL_PARACHUTE
 
--- version.cc.orig	2004-05-23 07:06:34.000000000 +0200
+++ version.cc	2005-01-11 00:11:46.000000000 +0100
@@ -242,6 +242,8 @@
 	out << "MorphOS";
 #elif (defined(AMIGA))
 	out << "Amiga";
+#elif (defined(NETBSD))
+	out << "NetBSD";
 #else
 	out << "Unknown";
 #endif
--- audio/Midi.cc.orig	2004-05-23 07:06:48.000000000 +0200
+++ audio/Midi.cc	2005-01-11 00:11:46.000000000 +0100
@@ -564,7 +564,7 @@
 #if HAVE_LIBKMIDI
 	TRY_MIDI_DRIVER(KMIDI);
 #endif
-#if (defined(XWIN) && !defined(OPENBSD) && !defined(__zaurus__))
+#if (defined(XWIN) && !defined(OPENBSD) && !defined(__zaurus__) && !defined(NETBSD))
 	TRY_MIDI_DRIVER(forked_player);
 #endif
 #if defined(MACOS) || defined(MACOSX)

--4Ckj6UjgE2iN1+kY--