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)...
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]);