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--