Recently, our team met an interesting bug: the process is configured to spawn 16
threads, but only spawns 10
threads in reality. The thread code is like this:
static void *
stat_consumer_thread_run(void *data)
{
stat_consumer_thread_t *thread = data;
char thread_name[64];
snprintf(thread_name, sizeof(thread_name), "stat.consumer.%d",
thread->id);
int rc = pthread_setname_np(pthread_self(), thread_name);
if (rc != 0) {
return NULL;
}
......
return NULL;
}
After checking pthread_setname_np manual, we found:
The thread name is a meaningful C language string, whose length is restricted to 16 characters, including the terminating null byte (’\0’).
So thread name is restricted to 16
characters, “stat.consumer.0
” ~ “stat.consumer.9
” are set successfully, but “stat.consumer.10
” ~ “stat.consumer.15
” are not, and the corresponding threads are failed to run.