mirror of
https://github.com/mpv-player/mpv
synced 2024-12-18 04:45:33 +00:00
600221e723
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.
59 lines
1.8 KiB
C
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
|
|
}
|