'Twas brillig, and Colin Guthrie at 23/04/11 17:51 did gyre and gimble: > 'Twas brillig, and Daniel Mack at 22/04/11 13:27 did gyre and gimble: >> Here goes another round of patches for PulseAudio on OS X. Most patches >> are small, and none of them should affect other systems than OSX. > > Thanks as always Daniel. I grabbed all the patches but tweaked the > commit messages a little bit, so you'll need a rebase for the next > batch. Hope that's OK :) Oh, forgot to mention that I had to tweak the code a bit too (squashed into your changes)... two problems I found: 1. A simple typo: diff --git a/src/pulse/util.c b/src/pulse/util.c index e44a864..48ccf29 100644 --- a/src/pulse/util.c +++ b/src/pulse/util.c @@ -226,7 +226,7 @@ char *pa_get_binary_name(char *s, size_t l) { } #endif -#if OS_IS_DARWIN +#ifdef OS_IS_DARWIN { int mib[] = { CTL_KERN, KERN_PROCARGS, getpid(), 0 }; size_t len, nmib = (sizeof(mib) / sizeof(mib[0])) - 1; 2. I found that HAVE_PTHREAD_SETNAME_NP was indeed defined on my system, but that it takes two arguments here, not one. This caused build errors for me. Thus I made the following change: diff --git a/src/pulsecore/thread-posix.c b/src/pulsecore/thread-posix.c index ae73267..58bcb72 100644 --- a/src/pulsecore/thread-posix.c +++ b/src/pulsecore/thread-posix.c @@ -71,10 +71,10 @@ static void* internal_thread_func(void *userdata) { pa_thread *t = userdata; pa_assert(t); -#ifdef HAVE_PTHREAD_SETNAME_NP - pthread_setname_np(t->name); -#elif defined(__linux__) +#ifdef __linux__ prctl(PR_SET_NAME, t->name); +#elif defined(HAVE_PTHREAD_SETNAME_NP) && defined(OS_IS_DARWIN) + pthread_setname_np(t->name); #endif t->id = pthread_self(); @@ -177,22 +177,17 @@ void pa_thread_set_name(pa_thread *t, const char *name) { pa_xfree(t->name); t->name = pa_xstrdup(name); -#ifdef HAVE_PTHREAD_SETNAME_NP - pthread_setname_np(name); -#elif defined(__linux__) +#ifdef __linux__ prctl(PR_SET_NAME, name); +#elif defined(HAVE_PTHREAD_SETNAME_NP) && defined(OS_IS_DARWIN) + pthread_setname_np(name); #endif } const char *pa_thread_get_name(pa_thread *t) { pa_assert(t); -#ifdef HAVE_PTHREAD_GETNAME_NP - if (!t->name) { - t->name = pa_xmalloc0(17); - pthread_getname_np(t->id, t->name, 16); - } -#elif defined(__linux__) +#ifdef __linux__ if (!t->name) { t->name = pa_xmalloc(17); @@ -203,6 +198,11 @@ const char *pa_thread_get_name(pa_thread *t) { t->name = NULL; } } +#elif defined(HAVE_PTHREAD_GETNAME_NP) && defined(OS_IS_DARWIN) + if (!t->name) { + t->name = pa_xmalloc0(17); + pthread_getname_np(t->id, t->name, 16); + } #endif return t->name; This should still work for you on OSX (if not, then I apologise!). I added the OS_IS_DARWIN bit as the API for pthread_setname_np does not appear to be totally stable (two args here, and I presume just one arg on OSX). I figured this may actually break windows stuff if it also has the two-arg version, hence the additional check. Hope that makes sense. Of course it may be possible to use pthread_setname_np on linux too (albeit with it's two arg variant...) which could simplify the code a bit... Both changes squashed into your commits. Col -- Colin Guthrie gmane(at)colin.guthr.ie http://colin.guthr.ie/ Day Job: Tribalogic Limited [http://www.tribalogic.net/] Open Source: Mageia Contributor [http://www.mageia.org/] PulseAudio Hacker [http://www.pulseaudio.org/] Trac Hacker [http://trac.edgewall.org/]