Hello community,

here is the log from the commit of package alsa for openSUSE:Factory checked in 
at 2013-04-26 07:11:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/alsa (Old)
 and      /work/SRC/openSUSE:Factory/.alsa.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "alsa", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/alsa/alsa.changes        2013-04-14 
10:11:04.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.alsa.new/alsa.changes   2013-04-26 
07:11:32.000000000 +0200
@@ -1,0 +2,12 @@
+Thu Apr 25 09:58:41 CEST 2013 - [email protected]
+
+- Upstream fix for dlobj cache crash (bnc#814250)
+  0001-Fix-doubly-call-of-dlclose-in-dlobj-caching-code.patch
+- Upstream patches for support DSD
+  0002-pcm.c-fix-indentation.patch
+  0003-bring-pcm.h-and-pcm.c-in-sync-with-the-kernel-list.patch
+- Fix compile errors with C90 (bnc#817077)
+  0004-Use-__inline__-for-exported-headers.patch
+  0005-Add-definition-of-__inline__-for-non-GCC.patch
+
+-------------------------------------------------------------------

New:
----
  0001-Fix-doubly-call-of-dlclose-in-dlobj-caching-code.patch
  0002-pcm.c-fix-indentation.patch
  0003-bring-pcm.h-and-pcm.c-in-sync-with-the-kernel-list.patch
  0004-Use-__inline__-for-exported-headers.patch
  0005-Add-definition-of-__inline__-for-non-GCC.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ alsa.spec ++++++
--- /var/tmp/diff_new_pack.WW4Tk1/_old  2013-04-26 07:11:39.000000000 +0200
+++ /var/tmp/diff_new_pack.WW4Tk1/_new  2013-04-26 07:11:39.000000000 +0200
@@ -53,6 +53,13 @@
 Source40:       50-alsa.conf
 Source41:       install-snd-module
 # Patch:          alsa-lib-git-fixes.diff
+# upstream fixes
+Patch1:         0001-Fix-doubly-call-of-dlclose-in-dlobj-caching-code.patch
+Patch2:         0002-pcm.c-fix-indentation.patch
+Patch3:         0003-bring-pcm.h-and-pcm.c-in-sync-with-the-kernel-list.patch
+Patch4:         0004-Use-__inline__-for-exported-headers.patch
+Patch5:         0005-Add-definition-of-__inline__-for-non-GCC.patch
+# rest suse patches
 Patch99:        alsa-lib-doxygen-avoid-crash-for-11.3.diff
 Url:            http://www.alsa-project.org/
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -103,6 +110,11 @@
 %prep
 %setup -q -n alsa-lib-%{package_version}
 # %patch -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
 %if %suse_version == 1130
 %patch99 -p1
 %endif

++++++ 0001-Fix-doubly-call-of-dlclose-in-dlobj-caching-code.patch ++++++
>From e1e40c25535af35fa5cdf7ffc95a01fbff098ddd Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Mon, 15 Apr 2013 18:12:17 +0200
Subject: [PATCH 1/5] Fix doubly call of dlclose() in dlobj caching code

When multiple dlobj_cache items point to the same dlobj, dlclose() may
be called wrongly multiple times when these items are cleared, because
we manage the dlobj_cache list as a flat list.  This results in a bad
segfault we've seen in openal-soft, for example.

For fixing this, we need the refcounting of dlobj itself.  But, in
this case, we don't have to manage yet another list,  since dlopen()
does a proper refcounting by itself.  That is, we can just call always
dlopen() at each time a new function is assigned, and also call
dlclose() for each released dlobj_cache item at cleanup.

Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=814250

Signed-off-by: Takashi Iwai <[email protected]>
---
 src/dlmisc.c | 31 +++++++++++--------------------
 1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/src/dlmisc.c b/src/dlmisc.c
index 3788382..2de0234 100644
--- a/src/dlmisc.c
+++ b/src/dlmisc.c
@@ -208,8 +208,7 @@ void *snd_dlobj_cache_get(const char *lib, const char *name,
 {
        struct list_head *p;
        struct dlobj_cache *c;
-       void *func, *dlobj = NULL;
-       int dlobj_close = 0;
+       void *func, *dlobj;
 
        snd_dlobj_lock();
        list_for_each(p, &pcm_dlobj_list) {
@@ -220,7 +219,6 @@ void *snd_dlobj_cache_get(const char *lib, const char *name,
                        continue;
                if (!lib && c->lib)
                        continue;
-               dlobj = c->dlobj;
                if (strcmp(c->name, name) == 0) {
                        c->refcnt++;
                        func = c->func;
@@ -228,17 +226,16 @@ void *snd_dlobj_cache_get(const char *lib, const char 
*name,
                        return func;
                }
        }
+
+       dlobj = snd_dlopen(lib, RTLD_NOW);
        if (dlobj == NULL) {
-               dlobj = snd_dlopen(lib, RTLD_NOW);
-               if (dlobj == NULL) {
-                       if (verbose)
-                               SNDERR("Cannot open shared library %s",
+               if (verbose)
+                       SNDERR("Cannot open shared library %s",
                                                lib ? lib : "[builtin]");
-                       snd_dlobj_unlock();
-                       return NULL;
-               }
-               dlobj_close = 1;
+               snd_dlobj_unlock();
+               return NULL;
        }
+
        func = snd_dlsym(dlobj, name, version);
        if (func == NULL) {
                if (verbose)
@@ -257,8 +254,7 @@ void *snd_dlobj_cache_get(const char *lib, const char *name,
                free((void *)c->lib);
                free(c);
              __err:
-               if (dlobj_close)
-                       snd_dlclose(dlobj);
+               snd_dlclose(dlobj);
                snd_dlobj_unlock();
                return NULL;
        }
@@ -298,16 +294,11 @@ void snd_dlobj_cache_cleanup(void)
        struct list_head *p, *npos;
        struct dlobj_cache *c;
 
-       /* clean up caches only when really no user is present */
        snd_dlobj_lock();
-       list_for_each(p, &pcm_dlobj_list) {
-               c = list_entry(p, struct dlobj_cache, list);
-               if (c->refcnt)
-                       goto unlock;
-       }
-
        list_for_each_safe(p, npos, &pcm_dlobj_list) {
                c = list_entry(p, struct dlobj_cache, list);
+               if (c->refcnt)
+                       continue;
                list_del(p);
                snd_dlclose(c->dlobj);
                free((void *)c->name); /* shut up gcc warning */
-- 
1.8.2.1

++++++ 0002-pcm.c-fix-indentation.patch ++++++
>From 697f8c296ccb4b38cec930782b5ef1419aaf4245 Mon Sep 17 00:00:00 2001
From: Daniel Mack <[email protected]>
Date: Thu, 18 Apr 2013 10:37:49 +0200
Subject: [PATCH 2/5] pcm.c: fix indentation

Signed-off-by: Daniel Mack <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
---
 src/pcm/pcm.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
index 38febb9..2a87a7b 100644
--- a/src/pcm/pcm.c
+++ b/src/pcm/pcm.c
@@ -1638,11 +1638,11 @@ static const char *const snd_pcm_type_names[] = {
        PCMTYPE(LADSPA), 
        PCMTYPE(DMIX), 
        PCMTYPE(JACK),
-        PCMTYPE(DSNOOP),
-        PCMTYPE(IEC958),
+       PCMTYPE(DSNOOP),
+       PCMTYPE(IEC958),
        PCMTYPE(SOFTVOL),
-        PCMTYPE(IOPLUG),
-        PCMTYPE(EXTPLUG),
+       PCMTYPE(IOPLUG),
+       PCMTYPE(EXTPLUG),
        PCMTYPE(MMAP_EMUL),
 };
 
-- 
1.8.2.1

++++++ 0003-bring-pcm.h-and-pcm.c-in-sync-with-the-kernel-list.patch ++++++
>From 886f0cc3c274643de464e646535afb4ceee1d816 Mon Sep 17 00:00:00 2001
From: Daniel Mack <[email protected]>
Date: Thu, 18 Apr 2013 10:37:50 +0200
Subject: [PATCH 3/5] bring pcm.h and pcm.c in sync with the kernel list

In particular, this adds definitions and descriptions for G.723 and
DSD types.

Signed-off-by: Daniel Mack <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
---
 include/pcm.h | 14 +++++++++++++-
 src/pcm/pcm.c | 12 ++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/include/pcm.h b/include/pcm.h
index d94ba90..e440030 100644
--- a/include/pcm.h
+++ b/include/pcm.h
@@ -199,7 +199,19 @@ typedef enum _snd_pcm_format {
        SND_PCM_FORMAT_U18_3LE,
        /** Unsigned 18bit Big Endian in 3bytes format */
        SND_PCM_FORMAT_U18_3BE,
-       SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_U18_3BE,
+       /* G.723 (ADPCM) 24 kbit/s, 8 samples in 3 bytes */
+       SND_PCM_FORMAT_G723_24,
+       /* G.723 (ADPCM) 24 kbit/s, 1 sample in 1 byte */
+       SND_PCM_FORMAT_G723_24_1B,
+       /* G.723 (ADPCM) 40 kbit/s, 8 samples in 3 bytes */
+       SND_PCM_FORMAT_G723_40,
+       /* G.723 (ADPCM) 40 kbit/s, 1 sample in 1 byte */
+       SND_PCM_FORMAT_G723_40_1B,
+       /* Direct Stream Digital (DSD) in 1-byte samples (x8) */
+       SND_PCM_FORMAT_DSD_U8,
+       /* Direct Stream Digital (DSD) in 2-byte samples (x16) */
+       SND_PCM_FORMAT_DSD_U16_LE,
+       SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U16_LE,
 
 #if __BYTE_ORDER == __LITTLE_ENDIAN
        /** Signed 16 bit CPU endian */
diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
index 2a87a7b..438fb3f 100644
--- a/src/pcm/pcm.c
+++ b/src/pcm/pcm.c
@@ -1558,6 +1558,12 @@ static const char *const snd_pcm_format_names[] = {
        FORMAT(S18_3BE),
        FORMAT(U18_3LE),
        FORMAT(U18_3BE),
+       FORMAT(G723_24),
+       FORMAT(G723_24_1B),
+       FORMAT(G723_40),
+       FORMAT(G723_40_1B),
+       FORMAT(DSD_U8),
+       FORMAT(DSD_U16_LE),
 };
 
 static const char *const snd_pcm_format_aliases[SND_PCM_FORMAT_LAST+1] = {
@@ -1611,6 +1617,12 @@ static const char *const snd_pcm_format_descriptions[] = 
{
        FORMATD(S18_3BE, "Signed 18 bit Big Endian in 3bytes"),
        FORMATD(U18_3LE, "Unsigned 18 bit Little Endian in 3bytes"),
        FORMATD(U18_3BE, "Unsigned 18 bit Big Endian in 3bytes"),
+       FORMATD(G723_24, "G.723 (ADPCM) 24 kbit/s, 8 samples in 3 bytes"),
+       FORMATD(G723_24_1B, "G.723 (ADPCM) 24 kbit/s, 1 sample in 1 byte"),
+       FORMATD(G723_40, "G.723 (ADPCM) 40 kbit/s, 8 samples in 3 bytes"),
+       FORMATD(G723_40_1B, "G.723 (ADPCM) 40 kbit/s, 1 sample in 1 byte"),
+       FORMATD(DSD_U8,  "Direct Stream Digital, 1-byte (x8), oldest bit in 
MSB"),
+       FORMATD(DSD_U16_LE, "Direct Stream Digital, 2-byte (x16), little 
endian, oldest bits in MSB"),
 };
 
 static const char *const snd_pcm_type_names[] = {
-- 
1.8.2.1

++++++ 0004-Use-__inline__-for-exported-headers.patch ++++++
>From 30122df4faf7ccc79b9525db95f55c5a8ed6fe4d Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Thu, 25 Apr 2013 09:52:33 +0200
Subject: [PATCH 4/5] Use __inline__ for exported headers

Some programs are still using C90.

Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=817077
Signed-off-by: Takashi Iwai <[email protected]>
---
 include/control.h     |  4 ++--
 include/iatomic.h     | 14 +++++++-------
 include/pcm.h         |  2 +-
 include/pcm_extplug.h |  4 ++--
 include/use-case.h    |  4 ++--
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/include/control.h b/include/control.h
index 27fe2ac..5fdf379 100644
--- a/include/control.h
+++ b/include/control.h
@@ -234,7 +234,7 @@ int snd_ctl_open_lconf(snd_ctl_t **ctl, const char *name, 
int mode, snd_config_t
 int snd_ctl_open_fallback(snd_ctl_t **ctl, snd_config_t *root, const char 
*name, const char *orig_name, int mode);
 int snd_ctl_close(snd_ctl_t *ctl);
 int snd_ctl_nonblock(snd_ctl_t *ctl, int nonblock);
-static inline int snd_ctl_abort(snd_ctl_t *ctl) { return snd_ctl_nonblock(ctl, 
2); }
+static __inline__ int snd_ctl_abort(snd_ctl_t *ctl) { return 
snd_ctl_nonblock(ctl, 2); }
 int snd_async_add_ctl_handler(snd_async_handler_t **handler, snd_ctl_t *ctl, 
                              snd_async_callback_t callback, void 
*private_data);
 snd_ctl_t *snd_async_handler_get_ctl(snd_async_handler_t *handler);
@@ -532,7 +532,7 @@ int snd_hctl_open(snd_hctl_t **hctl, const char *name, int 
mode);
 int snd_hctl_open_ctl(snd_hctl_t **hctlp, snd_ctl_t *ctl);
 int snd_hctl_close(snd_hctl_t *hctl);
 int snd_hctl_nonblock(snd_hctl_t *hctl, int nonblock);
-static inline int snd_hctl_abort(snd_hctl_t *hctl) { return 
snd_hctl_nonblock(hctl, 2); }
+static __inline__ int snd_hctl_abort(snd_hctl_t *hctl) { return 
snd_hctl_nonblock(hctl, 2); }
 int snd_hctl_poll_descriptors_count(snd_hctl_t *hctl);
 int snd_hctl_poll_descriptors(snd_hctl_t *hctl, struct pollfd *pfds, unsigned 
int space);
 int snd_hctl_poll_descriptors_revents(snd_hctl_t *ctl, struct pollfd *pfds, 
unsigned int nfds, unsigned short *revents);
diff --git a/include/iatomic.h b/include/iatomic.h
index e92dbfd..5711fe8 100644
--- a/include/iatomic.h
+++ b/include/iatomic.h
@@ -980,7 +980,7 @@ static __inline__ int atomic_dec_and_test(volatile atomic_t 
*v)
        return result;
 }
 
-static inline int atomic_add_negative(int i, volatile atomic_t *v)
+static __inline__ int atomic_add_negative(int i, volatile atomic_t *v)
 {
        unsigned long flags;
        int result;
@@ -1160,36 +1160,36 @@ typedef struct {
 
 void snd_atomic_read_wait(snd_atomic_read_t *t);
 
-static inline void snd_atomic_write_init(snd_atomic_write_t *w)
+static __inline__ void snd_atomic_write_init(snd_atomic_write_t *w)
 {
        w->begin = 0;
        w->end = 0;
 }
 
-static inline void snd_atomic_write_begin(snd_atomic_write_t *w)
+static __inline__ void snd_atomic_write_begin(snd_atomic_write_t *w)
 {
        w->begin++;
        wmb();
 }
 
-static inline void snd_atomic_write_end(snd_atomic_write_t *w)
+static __inline__ void snd_atomic_write_end(snd_atomic_write_t *w)
 {
        wmb();
        w->end++;
 }
 
-static inline void snd_atomic_read_init(snd_atomic_read_t *r, 
snd_atomic_write_t *w)
+static __inline__ void snd_atomic_read_init(snd_atomic_read_t *r, 
snd_atomic_write_t *w)
 {
        r->write = w;
 }
 
-static inline void snd_atomic_read_begin(snd_atomic_read_t *r)
+static __inline__ void snd_atomic_read_begin(snd_atomic_read_t *r)
 {
        r->end = r->write->end;
        rmb();
 }
 
-static inline int snd_atomic_read_ok(snd_atomic_read_t *r)
+static __inline__ int snd_atomic_read_ok(snd_atomic_read_t *r)
 {
        rmb();
        return r->end == r->write->begin;
diff --git a/include/pcm.h b/include/pcm.h
index e440030..95b8aed 100644
--- a/include/pcm.h
+++ b/include/pcm.h
@@ -451,7 +451,7 @@ int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm);
 int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int 
space);
 int snd_pcm_poll_descriptors_revents(snd_pcm_t *pcm, struct pollfd *pfds, 
unsigned int nfds, unsigned short *revents);
 int snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock);
-static inline int snd_pcm_abort(snd_pcm_t *pcm) { return snd_pcm_nonblock(pcm, 
2); }
+static __inline__ int snd_pcm_abort(snd_pcm_t *pcm) { return 
snd_pcm_nonblock(pcm, 2); }
 int snd_async_add_pcm_handler(snd_async_handler_t **handler, snd_pcm_t *pcm, 
                              snd_async_callback_t callback, void 
*private_data);
 snd_pcm_t *snd_async_handler_get_pcm(snd_async_handler_t *handler);
diff --git a/include/pcm_extplug.h b/include/pcm_extplug.h
index 884f322..e3b71bc 100644
--- a/include/pcm_extplug.h
+++ b/include/pcm_extplug.h
@@ -188,7 +188,7 @@ int 
snd_pcm_extplug_set_slave_param_minmax(snd_pcm_extplug_t *extplug, int type,
 /**
  * set the parameter constraint with a single value
  */
-static inline int snd_pcm_extplug_set_param(snd_pcm_extplug_t *extplug, int 
type, unsigned int val)
+static __inline__ int snd_pcm_extplug_set_param(snd_pcm_extplug_t *extplug, 
int type, unsigned int val)
 {
        return snd_pcm_extplug_set_param_list(extplug, type, 1, &val);
 }
@@ -196,7 +196,7 @@ static inline int 
snd_pcm_extplug_set_param(snd_pcm_extplug_t *extplug, int type
 /**
  * set the parameter constraint for slave PCM with a single value
  */
-static inline int snd_pcm_extplug_set_slave_param(snd_pcm_extplug_t *extplug, 
int type, unsigned int val)
+static __inline__ int snd_pcm_extplug_set_slave_param(snd_pcm_extplug_t 
*extplug, int type, unsigned int val)
 {
        return snd_pcm_extplug_set_slave_param_list(extplug, type, 1, &val);
 }
diff --git a/include/use-case.h b/include/use-case.h
index defd4ea..93b3456 100644
--- a/include/use-case.h
+++ b/include/use-case.h
@@ -354,7 +354,7 @@ int snd_use_case_mgr_reset(snd_use_case_mgr_t *uc_mgr);
  * \param list Returned allocated list
  * \return Number of list entries if success, otherwise a negative error code
  */
-static inline int snd_use_case_card_list(const char **list[])
+static __inline__ int snd_use_case_card_list(const char **list[])
 {
        return snd_use_case_get_list(NULL, NULL, list);
 }
@@ -365,7 +365,7 @@ static inline int snd_use_case_card_list(const char 
**list[])
  * \param list Returned list of verbs
  * \return Number of list entries if success, otherwise a negative error code
  */
-static inline int snd_use_case_verb_list(snd_use_case_mgr_t *uc_mgr,
+static __inline__ int snd_use_case_verb_list(snd_use_case_mgr_t *uc_mgr,
                                         const char **list[])
 {
        return snd_use_case_get_list(uc_mgr, "_verbs", list);
-- 
1.8.2.1

++++++ 0005-Add-definition-of-__inline__-for-non-GCC.patch ++++++
>From a8f405b8f90d752c3609b9e918dc949c4efadf87 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Thu, 25 Apr 2013 09:55:49 +0200
Subject: [PATCH 5/5] Add definition of __inline__ for non-GCC

Signed-off-by: Takashi Iwai <[email protected]>
---
 include/asoundlib-head.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/include/asoundlib-head.h b/include/asoundlib-head.h
index 6edbab0..71b5c29 100644
--- a/include/asoundlib-head.h
+++ b/include/asoundlib-head.h
@@ -40,6 +40,10 @@
 #include <errno.h>
 #include <stdarg.h>
 
+#ifndef __GNUC__
+#define __inline__ inline
+#endif
+
 #include <alsa/asoundef.h>
 #include <alsa/version.h>
 #include <alsa/global.h>
-- 
1.8.2.1




-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to