On Mon, May 23, 2016 at 09:09:34PM +0200, David Coppa wrote:
> On Mon, 23 May 2016, Ryan Freeman wrote:
>
> > Hey,
> >
> > I've noticed ioquake3 locking up randomly (but not dumping a core it seems).
> > Unfortunately I don't know when it started, but I was able to get something
> > from running it in gdb in tmux. dmesg included at bottom.
> >
> > Cheers!
> > -ryan
> >
> >
> > Bitterman^7 was gunned down by Slash^7
> > tty]
> > Program received signal SIGSEGV, Segmentation fault.
> > [Switching to thread 1021924]
> > 0x000008726a10899c in MixDirect_SSE () from /usr/local/lib/libopenal.so.2.2
> > (gdb) bt
>
> Please try the openal diff below (cherrypicked from upstream git)...
Applied and rebuilt openal, pretty sure that worked. I just played
through a few rounds and made it to 'tier 4' in the game, whereas
prior I don't think I was able to finish even a single match without
the hang...
Cheers!
-ryan
>
> Ciao!
> David
>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/audio/openal/Makefile,v
> retrieving revision 1.36
> diff -u -p -u -p -r1.36 Makefile
> --- Makefile 9 Apr 2016 21:11:56 -0000 1.36
> +++ Makefile 23 May 2016 19:08:48 -0000
> @@ -8,7 +8,7 @@ COMMENT = cross-platform 3D audio API
>
> V = 1.15.1
> EPOCH = 0
> -REVISION = 3
> +REVISION = 4
> DISTNAME = openal-soft-$V
> PKGNAME = openal-$V
> CATEGORIES = audio
> Index: patches/patch-Alc_mixer_sse_c
> ===================================================================
> RCS file: patches/patch-Alc_mixer_sse_c
> diff -N patches/patch-Alc_mixer_sse_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-Alc_mixer_sse_c 23 May 2016 19:08:48 -0000
> @@ -0,0 +1,25 @@
> +$OpenBSD$
> +
> +Avoid an underflow in the SSE mixers if BufferSize is less than 4
> +(upstream git commit 564a1822595e287cf808ea63a03d96719e3cc7b4)
> +
> +--- Alc/mixer_sse.c.orig Mon May 23 20:59:18 2016
> ++++ Alc/mixer_sse.c Mon May 23 21:00:32 2016
> +@@ -155,7 +155,7 @@ void MixDirect_SSE(const DirectParams *params, const A
> + ClickRemoval[c] -= data[0]*DrySend;
> +
> + gain = _mm_set1_ps(DrySend);
> +- for(pos = 0;pos < BufferSize-3;pos += 4)
> ++ for(pos = 0;BufferSize-pos > 3;pos += 4)
> + {
> + const __m128 val4 = _mm_load_ps(&data[pos]);
> + __m128 dry4 = _mm_load_ps(&DryBuffer[c][OutPos+pos]);
> +@@ -189,7 +189,7 @@ void MixSend_SSE(const SendParams *params, const ALflo
> + WetClickRemoval[0] -= data[0] * WetGain;
> +
> + gain = _mm_set1_ps(WetGain);
> +- for(pos = 0;pos < BufferSize-3;pos+=4)
> ++ for(pos = 0;BufferSize-pos > 3;pos += 4)
> + {
> + const __m128 val4 = _mm_load_ps(&data[pos]);
> + __m128 wet4 = _mm_load_ps(&WetBuffer[0][OutPos+pos]);