diff --git a/libc/bionic/posix_timers.cpp b/libc/bionic/posix_timers.cpp index bc3aeb21c..c8f71c831 100644 --- a/libc/bionic/posix_timers.cpp +++ b/libc/bionic/posix_timers.cpp @@ -174,10 +174,10 @@ int timer_create(clockid_t clock_id, sigevent* evp, timer_t* timer_id) { return -1; } - // Give the thread a meaningful name. + // Give the thread a specific meaningful name. // It can't do this itself because the kernel timer isn't created until after it's running. - char name[32]; - snprintf(name, sizeof(name), "POSIX interval timer %d", to_kernel_timer_id(timer)); + char name[16]; // 16 is the kernel-imposed limit. + snprintf(name, sizeof(name), "POSIX timer %d", to_kernel_timer_id(timer)); pthread_setname_np(timer->callback_thread, name); *timer_id = timer; diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index b8cfd565b..cb5e8187a 100644 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -404,7 +404,9 @@ TEST(pthread, pthread_sigmask) { } TEST(pthread, pthread_setname_np__too_long) { - ASSERT_EQ(ERANGE, pthread_setname_np(pthread_self(), "this name is far too long for linux")); + // The limit is 15 characters --- the kernel's buffer is 16, but includes a NUL. + ASSERT_EQ(0, pthread_setname_np(pthread_self(), "123456789012345")); + ASSERT_EQ(ERANGE, pthread_setname_np(pthread_self(), "1234567890123456")); } TEST(pthread, pthread_setname_np__self) {