45int dt_pthread_create(pthread_t *thread,
void *(*start_routine)(
void *),
void *arg,
const gboolean realtime)
53 ret = pthread_attr_init(&attr);
56 fprintf(stderr,
"[dt_pthread_create] error: pthread_attr_init() returned %i\n", ret);
62 ret = pthread_attr_getstacksize(&attr, &stacksize);
66 fprintf(stderr,
"[dt_pthread_create] error: pthread_attr_getstacksize() returned %i\n", ret);
73 fprintf(stderr,
"[dt_pthread_create] info: bumping pthread's stacksize from %" G_GSIZE_FORMAT
" to %"PRIuMAX
"\n", stacksize,
79 fprintf(stderr,
"[dt_pthread_create] error: pthread_attr_setstacksize() returned %i\n", ret);
83 if(ret != 0 && realtime)
86 ret = pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
89 fprintf(stderr,
"setschedpolicy: %s\n", strerror(ret));
94 struct sched_param
param = { .sched_priority = 80 };
95 ret = pthread_attr_setschedparam(&attr, &
param);
98 fprintf(stderr,
"setschedparam: %s\n", strerror(ret));
103 ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
106 fprintf(stderr,
"setinheritsched: %s\n", strerror(ret));
111 ret = pthread_create(thread, &attr, start_routine, arg);
113 pthread_attr_destroy(&attr);