diff options
author | Lennart Poettering <lennart@poettering.net> | 2007-09-28 12:52:47 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2007-09-28 12:52:47 +0000 |
commit | 3cdff5f3cc79aeabedada6633ce2d779d0a21b60 (patch) | |
tree | 05775067e2bce3bdbfbba4f8709bc41da651c8cc | |
parent | df33b4c7b339a1c26ccbfd80e5b91637c177b378 (diff) |
Allocate rtsigs from back to front, to avoid clashes with other libraries makeing use of rtsigs
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1913 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r-- | src/pulsecore/rtsig.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/pulsecore/rtsig.c b/src/pulsecore/rtsig.c index 3513bedf..1af45e77 100644 --- a/src/pulsecore/rtsig.c +++ b/src/pulsecore/rtsig.c @@ -50,17 +50,17 @@ static int rtsig_start = -1, rtsig_end = -1; int pa_rtsig_get(void) { void *p; int sig; - + if ((p = pa_flist_pop(PA_STATIC_FLIST_GET(rtsig_flist)))) return PA_PTR_TO_INT(p); - sig = pa_atomic_inc(&rtsig_current); + sig = pa_atomic_dec(&rtsig_current); - pa_assert(sig >= SIGRTMIN); - pa_assert(sig >= rtsig_start); - - if (sig > rtsig_end) { - pa_atomic_dec(&rtsig_current); + pa_assert(sig <= SIGRTMAX); + pa_assert(sig <= rtsig_end); + + if (sig < rtsig_start) { + pa_atomic_inc(&rtsig_current); return -1; } @@ -73,7 +73,7 @@ int pa_rtsig_get_for_thread(void) { if ((p = PA_STATIC_TLS_GET(rtsig_tls))) return PA_PTR_TO_INT(p); - + if ((sig = pa_rtsig_get()) < 0) return -1; @@ -102,11 +102,12 @@ void pa_rtsig_configure(int start, int end) { rtsig_end = end; sigemptyset(&ss); - + for (s = rtsig_start; s <= rtsig_end; s++) pa_assert_se(sigaddset(&ss, s) == 0); - + pa_assert(pthread_sigmask(SIG_BLOCK, &ss, NULL) == 0); - - pa_atomic_store(&rtsig_current, rtsig_start); + + /* We allocate starting from the end */ + pa_atomic_store(&rtsig_current, rtsig_end); } |