[SCM] Packaging for openal-soft branch, master, updated. debian/1.3.253-5-9-g1ba30b6

Gerfried Fuchs rhonda at debian.at
Sat Aug 9 19:48:28 UTC 2008


The following commit has been merged in the master branch:
commit 7261de42e77d68d2d27778da3fee971a2d46785e
Author: Gerfried Fuchs <rhonda at debian.at>
Date:   Sat Aug 9 16:27:17 2008 -0300

    Pulled upstream commits e66bb09156bb69725f91b2 and eba60c30c5e1676786b33b to fix an (de)initialization issue that produces segfaults when doing autofoo in some special circumstances.

diff --git a/debian/changelog b/debian/changelog
index 4cf182a..412a080 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+openal-soft (1:1.4.272-2) unstable; urgency=low
+
+  [ Gerfried Fuchs ]
+  * Pulled upstream commits e66bb09156bb69725f91b2 and eba60c30c5e1676786b33b
+    to fix an (de)initialization issue that produces segfaults when doing
+    autofoo in some special circumstances.
+
+ -- Gerfried Fuchs <rhonda at debian.at>  Sat, 09 Aug 2008 16:26:52 -0300
+
 openal-soft (1:1.4.272-1) unstable; urgency=low
 
   [ Andres Mejia ]
diff --git a/debian/patches/deinit-move.patch b/debian/patches/deinit-move.patch
new file mode 100644
index 0000000..d3779c0
--- /dev/null
+++ b/debian/patches/deinit-move.patch
@@ -0,0 +1,209 @@
+commit e66bb09156bb69725f91b249a6cdf0082f7fad74
+Author: Chris Robinson <chris.kcat at gmail.com>
+Date:   Thu Jul 17 18:38:07 2008 -0700
+
+    Move (de)initialization into ALc.c and remove unneeded file
+
+diff --git a/Alc/ALc.c b/Alc/ALc.c
+index cb4c2ce..22334ea 100644
+--- a/Alc/ALc.c
++++ b/Alc/ALc.c
+@@ -33,6 +33,7 @@
+ #include "AL/alc.h"
+ #include "alThunk.h"
+ #include "alSource.h"
++#include "alBuffer.h"
+ #include "alExtension.h"
+ #include "alAuxEffectSlot.h"
+ #include "bs2b.h"
+@@ -182,6 +183,8 @@ static ALCint alcEFXMinorVersion = 0;
+ static ALCdevice *g_pDeviceList = NULL;
+ static ALCuint    g_ulDeviceCount = 0;
+ 
++static CRITICAL_SECTION g_csMutex;
++
+ // Context List
+ static ALCcontext *g_pContextList = NULL;
+ static ALCuint     g_ulContextCount = 0;
+@@ -194,6 +197,49 @@ static ALCenum g_eLastContextError = ALC_NO_ERROR;
+ 
+ ///////////////////////////////////////////////////////
+ // ALC Related helper functions
++#ifdef _WIN32
++BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
++{
++    (void)lpReserved;
++
++    // Perform actions based on the reason for calling.
++    switch(ul_reason_for_call)
++    {
++        case DLL_PROCESS_ATTACH:
++            DisableThreadLibraryCalls(hModule);
++            break;
++
++        case DLL_PROCESS_DETACH:
++            ReleaseALC();
++            ReleaseALBuffers();
++            ReleaseALEffects();
++            ReleaseALFilters();
++            FreeALConfig();
++            ALTHUNK_EXIT();
++            DeleteCriticalSection(&g_csMutex);
++            break;
++    }
++    return TRUE;
++}
++#else
++#ifdef HAVE_GCC_DESTRUCTOR
++static void my_deinit() __attribute__((destructor));
++static void my_deinit()
++{
++    static ALenum once = AL_FALSE;
++    if(once) return;
++    once = AL_TRUE;
++
++    ReleaseALC();
++    ReleaseALBuffers();
++    ReleaseALEffects();
++    ReleaseALFilters();
++    FreeALConfig();
++    ALTHUNK_EXIT();
++    DeleteCriticalSection(&g_csMutex);
++}
++#endif
++#endif
+ 
+ static void InitAL(void)
+ {
+@@ -205,7 +251,7 @@ static void InitAL(void)
+ 
+         done = 1;
+ 
+-        InitializeCriticalSection(&_alMutex);
++        InitializeCriticalSection(&g_csMutex);
+         ALTHUNK_INIT();
+         ReadALConfig();
+ 
+@@ -335,7 +381,7 @@ ALCvoid SetALCError(ALenum errorCode)
+ ALCvoid SuspendContext(ALCcontext *pContext)
+ {
+     (void)pContext;
+-    EnterCriticalSection(&_alMutex);
++    EnterCriticalSection(&g_csMutex);
+ }
+ 
+ 
+@@ -347,7 +393,7 @@ ALCvoid SuspendContext(ALCcontext *pContext)
+ ALCvoid ProcessContext(ALCcontext *pContext)
+ {
+     (void)pContext;
+-    LeaveCriticalSection(&_alMutex);
++    LeaveCriticalSection(&g_csMutex);
+ }
+ 
+ 
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 810f61e..511405e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -206,7 +206,6 @@ SET(OPENAL_OBJS  OpenAL32/alAuxEffectSlot.c
+                  OpenAL32/alSource.c
+                  OpenAL32/alState.c
+                  OpenAL32/alThunk.c
+-                 OpenAL32/OpenAL32.c
+ )
+ SET(ALC_OBJS  Alc/ALc.c
+               Alc/ALu.c
+diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
+index 6bc5fd4..15512e7 100644
+--- a/OpenAL32/Include/alMain.h
++++ b/OpenAL32/Include/alMain.h
+@@ -103,8 +103,6 @@ static inline void Sleep(ALuint t)
+ extern "C" {
+ #endif
+ 
+-extern CRITICAL_SECTION _alMutex;
+-
+ extern char _alDebug[256];
+ 
+ #define AL_PRINT(...) do {                             \
+diff --git a/OpenAL32/OpenAL32.c b/OpenAL32/OpenAL32.c
+deleted file mode 100644
+index 71ebf0c..0000000
+--- a/OpenAL32/OpenAL32.c
++++ /dev/null
+@@ -1,74 +0,0 @@
+-/**
+- * OpenAL cross platform audio library
+- * Copyright (C) 1999-2007 by authors.
+- * This library is free software; you can redistribute it and/or
+- *  modify it under the terms of the GNU Library General Public
+- *  License as published by the Free Software Foundation; either
+- *  version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- *  Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public
+- *  License along with this library; if not, write to the
+- *  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+- *  Boston, MA  02111-1307, USA.
+- * Or go to http://www.gnu.org/copyleft/lgpl.html
+- */
+-
+-#include "config.h"
+-
+-#include "alMain.h"
+-#include "alBuffer.h"
+-#include "alFilter.h"
+-#include "alEffect.h"
+-#include "alAuxEffectSlot.h"
+-#include "alThunk.h"
+-
+-CRITICAL_SECTION _alMutex;
+-
+-#ifdef _WIN32
+-BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
+-{
+-    (void)lpReserved;
+-
+-    // Perform actions based on the reason for calling.
+-    switch(ul_reason_for_call)
+-    {
+-        case DLL_PROCESS_ATTACH:
+-            DisableThreadLibraryCalls(hModule);
+-            break;
+-
+-        case DLL_PROCESS_DETACH:
+-            ReleaseALC();
+-            ReleaseALBuffers();
+-            ReleaseALEffects();
+-            ReleaseALFilters();
+-            FreeALConfig();
+-            ALTHUNK_EXIT();
+-            DeleteCriticalSection(&_alMutex);
+-            break;
+-    }
+-    return TRUE;
+-}
+-#else
+-#ifdef HAVE_GCC_DESTRUCTOR
+-static void my_deinit() __attribute__((destructor));
+-static void my_deinit()
+-{
+-    static ALenum once = AL_FALSE;
+-    if(once) return;
+-    once = AL_TRUE;
+-
+-    ReleaseALC();
+-    ReleaseALBuffers();
+-    ReleaseALEffects();
+-    ReleaseALFilters();
+-    FreeALConfig();
+-    ALTHUNK_EXIT();
+-    DeleteCriticalSection(&_alMutex);
+-}
+-#endif
+-#endif
diff --git a/debian/patches/no-init-force.patch b/debian/patches/no-init-force.patch
new file mode 100644
index 0000000..66c93dd
--- /dev/null
+++ b/debian/patches/no-init-force.patch
@@ -0,0 +1,63 @@
+commit eba60c30c5e1676786b33be38c3845d850e96bcb
+Author: Chris Robinson <chris.kcat at gmail.com>
+Date:   Thu Jul 17 18:45:21 2008 -0700
+
+    Don't force initialization when shutting down
+    Thanks to Michael Simms
+
+diff --git a/Alc/ALc.c b/Alc/ALc.c
+index 22334ea..2363766 100644
+--- a/Alc/ALc.c
++++ b/Alc/ALc.c
+@@ -192,6 +192,8 @@ static ALCuint     g_ulContextCount = 0;
+ // Context Error
+ static ALCenum g_eLastContextError = ALC_NO_ERROR;
+ 
++static ALboolean init_done = AL_FALSE;
++
+ ///////////////////////////////////////////////////////
+ 
+ 
+@@ -210,6 +212,8 @@ BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
+             break;
+ 
+         case DLL_PROCESS_DETACH:
++            if(!init_done)
++                break;
+             ReleaseALC();
+             ReleaseALBuffers();
+             ReleaseALEffects();
+@@ -227,7 +231,7 @@ static void my_deinit() __attribute__((destructor));
+ static void my_deinit()
+ {
+     static ALenum once = AL_FALSE;
+-    if(once) return;
++    if(once || !init_done) return;
+     once = AL_TRUE;
+ 
+     ReleaseALC();
+@@ -243,13 +247,12 @@ static void my_deinit()
+ 
+ static void InitAL(void)
+ {
+-    static int done = 0;
+-    if(!done)
++    if(!init_done)
+     {
+         int i;
+         const char *devs, *str;
+ 
+-        done = 1;
++        init_done = AL_TRUE;
+ 
+         InitializeCriticalSection(&g_csMutex);
+         ALTHUNK_INIT();
+@@ -1294,8 +1297,6 @@ ALCAPI ALCboolean ALCAPIENTRY alcCloseDevice(ALCdevice *pDevice)
+ 
+ ALCvoid ReleaseALC(ALCvoid)
+ {
+-    InitAL();
+-
+ #ifdef _DEBUG
+     if(g_ulContextCount > 0)
+         AL_PRINT("exit() %u device(s) and %u context(s) NOT deleted\n", g_ulDeviceCount, g_ulContextCount);
diff --git a/debian/patches/series b/debian/patches/series
index 2d40801..fe461f9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,3 @@
 static_lib.patch
+deinit-move.patch
+no-init-force.patch

-- 
Packaging for openal-soft



More information about the Pkg-games-commits mailing list