51int dt_pthread_create(pthread_t *thread,
void *(*start_routine)(
void *),
void *arg,
const gboolean realtime)
59 ret = pthread_attr_init(&attr);
62 fprintf(stderr,
"[dt_pthread_create] error: pthread_attr_init() returned %i\n", ret);
68 ret = pthread_attr_getstacksize(&attr, &stacksize);
72 fprintf(stderr,
"[dt_pthread_create] error: pthread_attr_getstacksize() returned %i\n", ret);
79 fprintf(stderr,
"[dt_pthread_create] info: bumping pthread's stacksize from %" G_GSIZE_FORMAT
" to %"PRIuMAX
"\n", stacksize,
85 fprintf(stderr,
"[dt_pthread_create] error: pthread_attr_setstacksize() returned %i\n", ret);
89 if(ret != 0 && realtime)
92 ret = pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
95 fprintf(stderr,
"setschedpolicy: %s\n", strerror(ret));
100 struct sched_param
param = { .sched_priority = 80 };
101 ret = pthread_attr_setschedparam(&attr, &
param);
104 fprintf(stderr,
"setschedparam: %s\n", strerror(ret));
109 ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
112 fprintf(stderr,
"setinheritsched: %s\n", strerror(ret));
117 ret = pthread_create(thread, &attr, start_routine, arg);
119 pthread_attr_destroy(&attr);
133 unsigned long prev_holder, gboolean prev_was_writer)
136 name, tid, wait_ms, prev_holder, prev_was_writer ?
"writer" :
"reader");
140 unsigned long prev_holder, gboolean prev_was_writer,
141 int active_readers,
unsigned long oldest_reader_tid,
142 double oldest_reader_age_ms)
145 "[rwlock:%s] tid %lu waited %.2f ms for WRLOCK (last holder tid %lu, was %s; "
146 "%d active reader(s) when queued, oldest tid %lu held for %.2f ms)\n",
147 name, tid, wait_ms, prev_holder, prev_was_writer ?
"writer" :
"reader", active_readers,
148 oldest_reader_tid, oldest_reader_age_ms);
154 pthread_setname_np(pthread_self(),
name);
155#elif defined __FreeBSD__ || defined __DragonFly__
158#elif defined __NetBSD__
161#elif defined __OpenBSD__
163#elif defined __APPLE__
164 pthread_setname_np(
name);
#define WANTED_THREADS_STACK_SIZE
int dt_conf_get_int(const char *name)
void dt_print(dt_debug_thread_t thread, const char *msg,...)
int dt_pthread_create(pthread_t *thread, void *(*start_routine)(void *), void *arg, const gboolean realtime)
void _dt_pthread_rwlock_diag_log_rdlock(const char *name, unsigned long tid, double wait_ms, unsigned long prev_holder, gboolean prev_was_writer)
void _dt_pthread_rwlock_diag_log_wrlock(const char *name, unsigned long tid, double wait_ms, unsigned long prev_holder, gboolean prev_was_writer, int active_readers, unsigned long oldest_reader_tid, double oldest_reader_age_ms)
void dt_pthread_setname(const char *name)
void dtwin_set_thread_name(DWORD dwThreadID, const char *threadName)
const float const float param