1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-18 04:45:33 +00:00
mpv/osdep/threads.c
wm4 600221e723 osdep: limit thread names to 16 characters
It turns out the glibc people are very clever and return an error if the
thread name exceeds the maximum supported kernel length, instead of
truncating the name. So everyone has to hardcode the currently allowed
Linux kernel name length limit, even if it gets extended later.

Also the Lua script filenames could get too long; use the client name
instead.

Another strange thing is that on Linux, unrelated threads "inherit" the
name by the thread they were created. This leads to random thread names,
because there's not necessarily a strong relation between these threads
(e.g. script command leads to filter recreation -> the filter's threads
are tagged with the script's thread name). Unfortunate.
2014-10-20 00:17:11 +02:00

59 lines
1.8 KiB
C

/*
* This file is part of mpv.
*
* mpv is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* mpv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with mpv. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include "config.h"
#include "threads.h"
#include "timer.h"
int mpthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
int64_t abstime)
{
struct timespec ts = mp_time_us_to_timespec(abstime);
return pthread_cond_timedwait(cond, mutex, &ts);
}
int mpthread_cond_timedwait_rel(pthread_cond_t *cond, pthread_mutex_t *mutex,
double s)
{
return mpthread_cond_timedwait(cond, mutex, mp_add_timeout(mp_time_us(), s));
}
int mpthread_mutex_init_recursive(pthread_mutex_t *mutex)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
int r = pthread_mutex_init(mutex, &attr);
pthread_mutexattr_destroy(&attr);
return r;
}
void mpthread_set_name(const char *name)
{
char tname[16];
snprintf(tname, sizeof(tname), "mpv %s", name);
#if HAVE_GLIBC_THREAD_NAME
pthread_setname_np(pthread_self(), tname);
#elif HAVE_BSD_THREAD_NAME
pthread_set_name_np(pthread_self(), tname);
#elif HAVE_OSX_THREAD_NAME
pthread_setname_np(tname);
#endif
}