* [PATCH 0/2] Fix thread safety issues
@ 2013-01-30 15:22 Jerome Forissier
2013-01-30 15:22 ` [PATCH 1/2] Make snd_device_name_hint() thread-safe by locking a mutex Jerome Forissier
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Jerome Forissier @ 2013-01-30 15:22 UTC (permalink / raw)
To: alsa-devel; +Cc: Jerome Forissier
This is a set of two patches to fix thread safety issues I found when running
a video application over ALSA. The application uses LibVLC to play several
videos simultaneously. LibVLC calls snd_pcm_open() and snd_device_name_hint()
from multiple threads, without locking--which is allowed according to
http://www.alsa-project.org/main/index.php/SMP_Design.
Without these patches, I would get random error messages like:
ALSA lib confmisc.c:768:(parse_card) cannot find card '$CARD'
ALSA lib conf.c:4184:(_snd_config_evaluate) function snd_func_card_driver returned error: No such device
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4184:(_snd_config_evaluate) function snd_func_concat returned error: No such device
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4184:(_snd_config_evaluate) function snd_func_refer returned error: No such device
ALSA lib conf.c:4663:(snd_config_expand) Evaluate error: No such device
Jerome Forissier (2):
Make snd_device_name_hint() thread-safe by locking a mutex
snd_pcm_direct_parse_open_conf(): use thread-safe getgrnam_r()
src/control/namehint.c | 31 +++++++++++++++++++++++++++++++
src/pcm/pcm_direct.c | 15 +++++++++++----
2 files changed, 42 insertions(+), 4 deletions(-)
--
1.8.1.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] Make snd_device_name_hint() thread-safe by locking a mutex
2013-01-30 15:22 [PATCH 0/2] Fix thread safety issues Jerome Forissier
@ 2013-01-30 15:22 ` Jerome Forissier
2013-01-30 15:22 ` [PATCH 2/2] snd_pcm_direct_parse_open_conf(): use thread-safe getgrnam_r() Jerome Forissier
2013-01-30 16:03 ` [PATCH 0/2] Fix thread safety issues Takashi Iwai
2 siblings, 0 replies; 9+ messages in thread
From: Jerome Forissier @ 2013-01-30 15:22 UTC (permalink / raw)
To: alsa-devel; +Cc: Jerome Forissier
Signed-off-by: Jerome Forissier <jerome@taodyne.com>
---
src/control/namehint.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/src/control/namehint.c b/src/control/namehint.c
index 19352be..b30f75d 100644
--- a/src/control/namehint.c
+++ b/src/control/namehint.c
@@ -26,6 +26,9 @@
*/
#include "local.h"
+#ifdef HAVE_LIBPTHREAD
+#include <pthread.h>
+#endif
#ifndef DOC_HIDDEN
struct hint_list {
@@ -44,6 +47,25 @@ struct hint_list {
int show_all;
char *cardname;
};
+
+#ifdef HAVE_LIBPTHREAD
+static pthread_mutex_t snd_device_name_hint_mutex =
+ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+#endif
+
+static inline void snd_device_name_hint_lock()
+{
+#ifdef HAVE_LIBPTHREAD
+ pthread_mutex_lock(&snd_device_name_hint_mutex);
+#endif
+}
+
+static inline void snd_device_name_hint_unlock()
+{
+#ifdef HAVE_LIBPTHREAD
+ pthread_mutex_unlock(&snd_device_name_hint_mutex);
+#endif
+}
#endif
static int hint_list_add(struct hint_list *list,
@@ -553,9 +575,13 @@ int snd_device_name_hint(int card, const char *iface, void ***hints)
if (hints == NULL)
return -EINVAL;
+ snd_device_name_hint_lock();
err = snd_config_update();
if (err < 0)
+ {
+ snd_device_name_hint_unlock();
return err;
+ }
list.list = NULL;
list.count = list.allocated = 0;
list.siface = iface;
@@ -574,7 +600,10 @@ int snd_device_name_hint(int card, const char *iface, void ***hints)
else if (strcmp(iface, "ctl") == 0)
list.iface = SND_CTL_ELEM_IFACE_MIXER;
else
+ {
+ snd_device_name_hint_unlock();
return -EINVAL;
+ }
list.show_all = 0;
list.cardname = NULL;
if (snd_config_search(snd_config, "defaults.namehint.showall", &conf) >= 0)
@@ -618,6 +647,7 @@ int snd_device_name_hint(int card, const char *iface, void ***hints)
snd_device_name_free_hint((void **)list.list);
if (list.cardname)
free(list.cardname);
+ snd_device_name_hint_unlock();
return err;
} else {
err = hint_list_add(&list, NULL, NULL);
@@ -627,6 +657,7 @@ int snd_device_name_hint(int card, const char *iface, void ***hints)
if (list.cardname)
free(list.cardname);
}
+ snd_device_name_hint_unlock();
return 0;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] snd_pcm_direct_parse_open_conf(): use thread-safe getgrnam_r()
2013-01-30 15:22 [PATCH 0/2] Fix thread safety issues Jerome Forissier
2013-01-30 15:22 ` [PATCH 1/2] Make snd_device_name_hint() thread-safe by locking a mutex Jerome Forissier
@ 2013-01-30 15:22 ` Jerome Forissier
2013-01-30 16:03 ` [PATCH 0/2] Fix thread safety issues Takashi Iwai
2 siblings, 0 replies; 9+ messages in thread
From: Jerome Forissier @ 2013-01-30 15:22 UTC (permalink / raw)
To: alsa-devel; +Cc: Jerome Forissier
Fixes a thread safety issue with snd_pcm_open().
Signed-off-by: Jerome Forissier <jerome@taodyne.com>
---
src/pcm/pcm_direct.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c
index 6802ecc..38c6c66 100644
--- a/src/pcm/pcm_direct.c
+++ b/src/pcm/pcm_direct.c
@@ -1629,13 +1629,20 @@ int snd_pcm_direct_parse_open_conf(snd_config_t *root, snd_config_t *conf,
continue;
}
if (isdigit(*group) == 0) {
- struct group *grp = getgrnam(group);
- if (grp == NULL) {
+ long clen = sysconf(_SC_GETGR_R_SIZE_MAX);
+ size_t len = (clen == -1) ? 1024 : (size_t)clen;
+ struct group grp, *pgrp;
+ char *buffer = (char *)malloc(len);
+ if (buffer == NULL)
+ return -ENOMEM;
+ int st = getgrnam_r(group, &grp, buffer, len, &pgrp);
+ if (st != 0) {
SNDERR("The field ipc_gid must be a valid group (create group %s)", group);
- free(group);
+ free(buffer);
return -EINVAL;
}
- rec->ipc_gid = grp->gr_gid;
+ rec->ipc_gid = pgrp->gr_gid;
+ free(buffer);
} else {
rec->ipc_gid = strtol(group, &endp, 10);
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Fix thread safety issues
2013-01-30 15:22 [PATCH 0/2] Fix thread safety issues Jerome Forissier
2013-01-30 15:22 ` [PATCH 1/2] Make snd_device_name_hint() thread-safe by locking a mutex Jerome Forissier
2013-01-30 15:22 ` [PATCH 2/2] snd_pcm_direct_parse_open_conf(): use thread-safe getgrnam_r() Jerome Forissier
@ 2013-01-30 16:03 ` Takashi Iwai
2013-01-30 18:13 ` Jérôme Forissier
2 siblings, 1 reply; 9+ messages in thread
From: Takashi Iwai @ 2013-01-30 16:03 UTC (permalink / raw)
To: Jerome Forissier; +Cc: alsa-devel
At Wed, 30 Jan 2013 16:22:15 +0100,
Jerome Forissier wrote:
>
> This is a set of two patches to fix thread safety issues I found when running
> a video application over ALSA. The application uses LibVLC to play several
> videos simultaneously. LibVLC calls snd_pcm_open() and snd_device_name_hint()
> from multiple threads, without locking--which is allowed according to
> http://www.alsa-project.org/main/index.php/SMP_Design.
The fix for snd_pcm_direct_parse_open_conf() looks good. I'm going to
apply this now.
snd_device_name_hint() should use snd_config_update_r() and pass the
local config space to others instead of snd_config.
thanks,
Takashi
>
> Without these patches, I would get random error messages like:
>
> ALSA lib confmisc.c:768:(parse_card) cannot find card '$CARD'
> ALSA lib conf.c:4184:(_snd_config_evaluate) function snd_func_card_driver returned error: No such device
> ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
> ALSA lib conf.c:4184:(_snd_config_evaluate) function snd_func_concat returned error: No such device
> ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
> ALSA lib conf.c:4184:(_snd_config_evaluate) function snd_func_refer returned error: No such device
> ALSA lib conf.c:4663:(snd_config_expand) Evaluate error: No such device
>
> Jerome Forissier (2):
> Make snd_device_name_hint() thread-safe by locking a mutex
> snd_pcm_direct_parse_open_conf(): use thread-safe getgrnam_r()
>
> src/control/namehint.c | 31 +++++++++++++++++++++++++++++++
> src/pcm/pcm_direct.c | 15 +++++++++++----
> 2 files changed, 42 insertions(+), 4 deletions(-)
>
> --
> 1.8.1.2
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Fix thread safety issues
2013-01-30 16:03 ` [PATCH 0/2] Fix thread safety issues Takashi Iwai
@ 2013-01-30 18:13 ` Jérôme Forissier
2013-01-31 8:54 ` Takashi Iwai
0 siblings, 1 reply; 9+ messages in thread
From: Jérôme Forissier @ 2013-01-30 18:13 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
On 30 janv. 2013, at 17:03, Takashi Iwai wrote:
> At Wed, 30 Jan 2013 16:22:15 +0100,
> Jerome Forissier wrote:
>>
>> This is a set of two patches to fix thread safety issues I found when running
>> a video application over ALSA. The application uses LibVLC to play several
>> videos simultaneously. LibVLC calls snd_pcm_open() and snd_device_name_hint()
>> from multiple threads, without locking--which is allowed according to
>> http://www.alsa-project.org/main/index.php/SMP_Design.
>
> The fix for snd_pcm_direct_parse_open_conf() looks good. I'm going to
> apply this now.
Good, thank you :)
> snd_device_name_hint() should use snd_config_update_r() and pass the
> local config space to others instead of snd_config.
I tried following this path, but there is a problem: try_config() calls snd_lib_error_set_handler() so I fail to see how we can make this code reentrant.
In fact, the random errors I've seen when running my multi-threaded test were probably just a side-effect of fiddling with the global error handler from multiple threads. Probably harmless, but still it makes snd_device_name_hint() not thread-safe, strictly speaking.
Any suggestion? Should I consider moving snd_lib_error to thread-local storage?
Thanks.
--
Jerome
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Fix thread safety issues
2013-01-30 18:13 ` Jérôme Forissier
@ 2013-01-31 8:54 ` Takashi Iwai
2013-01-31 9:48 ` Jérôme Forissier
0 siblings, 1 reply; 9+ messages in thread
From: Takashi Iwai @ 2013-01-31 8:54 UTC (permalink / raw)
To: Jérôme Forissier; +Cc: alsa-devel
At Wed, 30 Jan 2013 19:13:54 +0100,
Jérôme Forissier wrote:
>
>
> On 30 janv. 2013, at 17:03, Takashi Iwai wrote:
>
> > At Wed, 30 Jan 2013 16:22:15 +0100,
> > Jerome Forissier wrote:
> >>
> >> This is a set of two patches to fix thread safety issues I found when running
> >> a video application over ALSA. The application uses LibVLC to play several
> >> videos simultaneously. LibVLC calls snd_pcm_open() and snd_device_name_hint()
> >> from multiple threads, without locking--which is allowed according to
> >> http://www.alsa-project.org/main/index.php/SMP_Design.
> >
> > The fix for snd_pcm_direct_parse_open_conf() looks good. I'm going to
> > apply this now.
>
> Good, thank you :)
>
> > snd_device_name_hint() should use snd_config_update_r() and pass the
> > local config space to others instead of snd_config.
>
>
> I tried following this path, but there is a problem: try_config() calls snd_lib_error_set_handler() so I fail to see how we can make this code reentrant.
> In fact, the random errors I've seen when running my multi-threaded test were probably just a side-effect of fiddling with the global error handler from multiple threads. Probably harmless, but still it makes snd_device_name_hint() not thread-safe, strictly speaking.
Yeah, I see the issue now, too.
The problem is that the error handler is really global, not only used
in conf.c and co. Thus applying a lock locally doesn't suffice.
> Any suggestion? Should I consider moving snd_lib_error to thread-local storage?
TLB would be an option, indeed. But blindly moving snd_lib_error to
TLS breaks the current behavior, so we should avoid it.
How about a patch like below? It adds another error redirection.
Unless local_error is set, the behavior is identical.
(Maybe we can name it better, yeah. I just wanted to avoid to put a
word "thread" in the function because it should be usable in both
thread- and non-thread-capable environment.)
thanks,
Takashi
---
diff --git a/include/error.h b/include/error.h
index 6d27083..256cd5f 100644
--- a/include/error.h
+++ b/include/error.h
@@ -74,5 +74,11 @@ extern int snd_lib_error_set_handler(snd_lib_error_handler_t handler);
}
#endif
+typedef void (*snd_local_error_handler_t)(const char *file, int line,
+ const char *func, int err,
+ const char *fmt, va_list arg);
+
+snd_local_error_handler_t snd_lib_error_set_local(snd_local_error_handler_t func);
+
#endif /* __ALSA_ERROR_H */
diff --git a/src/control/namehint.c b/src/control/namehint.c
index 19352be..defc036 100644
--- a/src/control/namehint.c
+++ b/src/control/namehint.c
@@ -80,7 +80,8 @@ static void zero_handler(const char *file ATTRIBUTE_UNUSED,
int line ATTRIBUTE_UNUSED,
const char *function ATTRIBUTE_UNUSED,
int err ATTRIBUTE_UNUSED,
- const char *fmt ATTRIBUTE_UNUSED, ...)
+ const char *fmt ATTRIBUTE_UNUSED,
+ va_list arg ATTRIBUTE_UNUSED)
{
}
@@ -212,7 +213,7 @@ static int try_config(struct hint_list *list,
const char *base,
const char *name)
{
- snd_lib_error_handler_t eh;
+ snd_local_error_handler_t eh;
snd_config_t *res = NULL, *cfg, *cfg1, *n;
snd_config_iterator_t i, next;
char *buf, *buf1 = NULL, *buf2;
@@ -239,10 +240,9 @@ static int try_config(struct hint_list *list,
sprintf(buf, "%s:CARD=%s", name, snd_ctl_card_info_get_id(list->info));
else
strcpy(buf, name);
- eh = snd_lib_error;
- snd_lib_error_set_handler(&zero_handler);
+ eh = snd_lib_error_set_local(&zero_handler);
err = snd_config_search_definition(snd_config, base, buf, &res);
- snd_lib_error_set_handler(eh);
+ snd_lib_error_set_local(eh);
if (err < 0)
goto __skip_add;
cleanup_res = 1;
@@ -337,10 +337,9 @@ static int try_config(struct hint_list *list,
goto __ok;
/* find, if all parameters have a default, */
/* otherwise filter this definition */
- eh = snd_lib_error;
- snd_lib_error_set_handler(&zero_handler);
+ eh = snd_lib_error_set_local(&zero_handler);
err = snd_config_search_alias_hooks(snd_config, base, buf, &res);
- snd_lib_error_set_handler(eh);
+ snd_lib_error_set_local(eh);
if (err < 0)
goto __cleanup;
if (snd_config_search(res, "@args", &cfg) >= 0) {
diff --git a/src/error.c b/src/error.c
index 7d5f509..6026ede 100644
--- a/src/error.c
+++ b/src/error.c
@@ -60,6 +60,23 @@ const char *snd_strerror(int errnum)
return snd_error_codes[errnum];
}
+#define SUPPORT_TLS /* XXX should be checked in configure */
+
+#ifdef SUPPORT_TLS
+#define TLS_PFX __thread
+#else
+#define TLS_PFX /* NOP */
+#endif
+
+static TLS_PFX snd_local_error_handler_t local_error;
+
+snd_local_error_handler_t snd_lib_error_set_local(snd_local_error_handler_t func)
+{
+ snd_local_error_handler_t old = local_error;
+ local_error = func;
+ return old;
+}
+
/**
* \brief The default error handler function.
* \param file The filename where the error was hit.
@@ -75,6 +92,11 @@ static void snd_lib_error_default(const char *file, int line, const char *functi
{
va_list arg;
va_start(arg, fmt);
+ if (local_error) {
+ local_error(file, line, function, err, fmt, arg);
+ va_end(arg);
+ return;
+ }
fprintf(stderr, "ALSA lib %s:%i:(%s) ", file, line, function);
vfprintf(stderr, fmt, arg);
if (err)
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Fix thread safety issues
2013-01-31 8:54 ` Takashi Iwai
@ 2013-01-31 9:48 ` Jérôme Forissier
2013-01-31 10:09 ` Takashi Iwai
0 siblings, 1 reply; 9+ messages in thread
From: Jérôme Forissier @ 2013-01-31 9:48 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
On 31 janv. 2013, at 09:54, Takashi Iwai wrote:
> At Wed, 30 Jan 2013 19:13:54 +0100,
> Jérôme Forissier wrote:
>>
>> On 30 janv. 2013, at 17:03, Takashi Iwai wrote:
>>
>>> At Wed, 30 Jan 2013 16:22:15 +0100,
>>> Jerome Forissier wrote:
<...>
>>> snd_device_name_hint() should use snd_config_update_r() and pass the
>>> local config space to others instead of snd_config.
>>
>> I tried following this path, but there is a problem: try_config() calls snd_lib_error_set_handler() so I fail to see how we can make this code reentrant.
>> In fact, the random errors I've seen when running my multi-threaded test were probably just a side-effect of fiddling with the global error handler from multiple threads. Probably harmless, but still it makes snd_device_name_hint() not thread-safe, strictly speaking.
>
> Yeah, I see the issue now, too.
>
> The problem is that the error handler is really global, not only used
> in conf.c and co. Thus applying a lock locally doesn't suffice.
>
>> Any suggestion? Should I consider moving snd_lib_error to thread-local storage?
>
> TLB would be an option, indeed. But blindly moving snd_lib_error to
> TLS breaks the current behavior, so we should avoid it.
One could argue that the current behavior with multi-threaded apps is undefined anyways. But I see what you mean.
> How about a patch like below? It adds another error redirection.
> Unless local_error is set, the behavior is identical.
Nice suggestion. Will try that. After all, "all problems in computer science can be solved by another level of indirection..." ;-)
> (Maybe we can name it better, yeah. I just wanted to avoid to put a
> word "thread" in the function because it should be usable in both
> thread- and non-thread-capable environment.)
Well you can consider that, in a non-threaded environment, there is just one thread (the main thread).
Thanks for your help. I will post an updated patch when done.
--
Jerome
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Fix thread safety issues
2013-01-31 9:48 ` Jérôme Forissier
@ 2013-01-31 10:09 ` Takashi Iwai
2013-01-31 11:38 ` Jaroslav Kysela
0 siblings, 1 reply; 9+ messages in thread
From: Takashi Iwai @ 2013-01-31 10:09 UTC (permalink / raw)
To: Jérôme Forissier; +Cc: alsa-devel
At Thu, 31 Jan 2013 10:48:27 +0100,
Jérôme Forissier wrote:
>
>
> On 31 janv. 2013, at 09:54, Takashi Iwai wrote:
>
> > At Wed, 30 Jan 2013 19:13:54 +0100,
> > Jérôme Forissier wrote:
> >>
> >> On 30 janv. 2013, at 17:03, Takashi Iwai wrote:
> >>
> >>> At Wed, 30 Jan 2013 16:22:15 +0100,
> >>> Jerome Forissier wrote:
> <...>
> >>> snd_device_name_hint() should use snd_config_update_r() and pass the
> >>> local config space to others instead of snd_config.
> >>
> >> I tried following this path, but there is a problem: try_config() calls snd_lib_error_set_handler() so I fail to see how we can make this code reentrant.
> >> In fact, the random errors I've seen when running my multi-threaded test were probably just a side-effect of fiddling with the global error handler from multiple threads. Probably harmless, but still it makes snd_device_name_hint() not thread-safe, strictly speaking.
> >
> > Yeah, I see the issue now, too.
> >
> > The problem is that the error handler is really global, not only used
> > in conf.c and co. Thus applying a lock locally doesn't suffice.
> >
> >> Any suggestion? Should I consider moving snd_lib_error to thread-local storage?
> >
> > TLB would be an option, indeed. But blindly moving snd_lib_error to
> > TLS breaks the current behavior, so we should avoid it.
>
> One could argue that the current behavior with multi-threaded apps
> is undefined anyways.
Yes, it was simply badly designed like errno.
We can't change it at this point, but put a clear statement at least.
If so, the web page should updated, too.
Jaroslav, could you add some texts like below? (Feel free to
rephrase.)
"There are a few global variables that are used in alsa-lib, such as
the global error handler pointer and the global root config pointer.
Accessing / modifying these would be thread-unsafe."
> But I see what you mean.
>
> > How about a patch like below? It adds another error redirection.
> > Unless local_error is set, the behavior is identical.
>
> Nice suggestion. Will try that. After all, "all problems in computer science can be solved by another level of indirection..." ;-)
Hehe.
> > (Maybe we can name it better, yeah. I just wanted to avoid to put a
> > word "thread" in the function because it should be usable in both
> > thread- and non-thread-capable environment.)
>
> Well you can consider that, in a non-threaded environment, there is just one thread (the main thread).
Hm, one can call it so, too. I don't mind much how it's named.
Spell it if you have a better one.
thanks,
Takashi
>
> Thanks for your help. I will post an updated patch when done.
>
> --
> Jerome
>
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] Fix thread safety issues
2013-01-31 10:09 ` Takashi Iwai
@ 2013-01-31 11:38 ` Jaroslav Kysela
0 siblings, 0 replies; 9+ messages in thread
From: Jaroslav Kysela @ 2013-01-31 11:38 UTC (permalink / raw)
To: Takashi Iwai; +Cc: ALSA development
Date 31.1.2013 11:09, Takashi Iwai wrote:
> Jaroslav, could you add some texts like below? (Feel free to
> rephrase.)
>
> "There are a few global variables that are used in alsa-lib, such as
> the global error handler pointer and the global root config pointer.
> Accessing / modifying these would be thread-unsafe."
Added.
Jaroslav
--
Jaroslav Kysela <perex@perex.cz>
Linux Kernel Sound Maintainer
ALSA Project; Red Hat, Inc.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2013-01-31 11:38 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-30 15:22 [PATCH 0/2] Fix thread safety issues Jerome Forissier
2013-01-30 15:22 ` [PATCH 1/2] Make snd_device_name_hint() thread-safe by locking a mutex Jerome Forissier
2013-01-30 15:22 ` [PATCH 2/2] snd_pcm_direct_parse_open_conf(): use thread-safe getgrnam_r() Jerome Forissier
2013-01-30 16:03 ` [PATCH 0/2] Fix thread safety issues Takashi Iwai
2013-01-30 18:13 ` Jérôme Forissier
2013-01-31 8:54 ` Takashi Iwai
2013-01-31 9:48 ` Jérôme Forissier
2013-01-31 10:09 ` Takashi Iwai
2013-01-31 11:38 ` Jaroslav Kysela
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).