diff --git a/src/unix/darwin-proctitle.c b/src/unix/darwin-proctitle.c index eced23c2..8d074b34 100644 --- a/src/unix/darwin-proctitle.c +++ b/src/unix/darwin-proctitle.c @@ -23,7 +23,6 @@ #include #include -#include #include #include @@ -37,6 +36,7 @@ #define S(s) pCFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8) +static int (*dynamic_pthread_setname_np)(const char* name); #if !TARGET_OS_IPHONE static CFStringRef (*pCFStringCreateWithCString)(CFAllocatorRef, const char*, @@ -77,9 +77,13 @@ UV_DESTRUCTOR(static void uv__set_process_title_platform_fini(void)) { void uv__set_process_title_platform_init(void) { -#if !TARGET_OS_IPHONE OSStatus (*pSetApplicationIsDaemon)(int); + /* pthread_setname_np() first appeared in OS X 10.6 and iOS 3.2. */ + *(void **)(&dynamic_pthread_setname_np) = + dlsym(RTLD_DEFAULT, "pthread_setname_np"); + +#if !TARGET_OS_IPHONE application_services_handle = dlopen("/System/Library/Frameworks/" "ApplicationServices.framework/" "Versions/A/ApplicationServices", @@ -177,8 +181,6 @@ out: void uv__set_process_title(const char* title) { - char namebuf[64 /* MAXTHREADNAMESIZE */]; - #if !TARGET_OS_IPHONE if (core_foundation_handle != NULL) { CFTypeRef asn; @@ -191,6 +193,9 @@ void uv__set_process_title(const char* title) { } #endif /* !TARGET_OS_IPHONE */ - uv__strscpy(namebuf, title, sizeof(namebuf)); - pthread_setname_np(namebuf); + if (dynamic_pthread_setname_np != NULL) { + char namebuf[64]; /* MAXTHREADNAMESIZE */ + uv__strscpy(namebuf, title, sizeof(namebuf)); + dynamic_pthread_setname_np(namebuf); + } }