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

Reply via email to