29 __const pthread_attr_t *__restrict,
31 void *__restrict) = NULL;
37 fprintf(stderr,
"pthreads: using profiling hooks for gprof\n");
40 char *
error = dlerror();
43 error =
"pthread_create is NULL";
45 fprintf(stderr,
"%s", error);
53 void * (*start_routine)(
void *);
67 void * (*start_routine)(
void *) = ((
wrapper_t*)data)->start_routine;
71 setitimer(ITIMER_PROF, &((
wrapper_t*)data)->itimer, NULL);
74 pthread_mutex_lock(&((
wrapper_t*)data)->lock);
75 pthread_cond_signal(&((
wrapper_t*)data)->wait);
76 pthread_mutex_unlock(&((
wrapper_t*)data)->lock);
79 return start_routine(arg);
84 __const pthread_attr_t *__restrict attr,
85 void * (*start_routine)(
void *),
93 wrapper_data.
arg = arg;
94 getitimer(ITIMER_PROF, &wrapper_data.
itimer);
95 pthread_cond_init(&wrapper_data.
wait, NULL);
96 pthread_mutex_init(&wrapper_data.
lock, NULL);
97 pthread_mutex_lock(&wrapper_data.
lock);
109 pthread_cond_wait(&wrapper_data.
wait, &wrapper_data.
lock);
112 pthread_mutex_unlock(&wrapper_data.
lock);
113 pthread_mutex_destroy(&wrapper_data.
lock);
114 pthread_cond_destroy(&wrapper_data.
wait);
struct wrapper_s wrapper_t
LIBPBD_API Transmitter error
static void * wrapper_routine(void *)
void *(* start_routine)(void *)
static int(* pthread_create_orig)(pthread_t *__restrict, __const pthread_attr_t *__restrict, void *(*)(void *), void *__restrict)
int pthread_create(pthread_t *__restrict thread, __const pthread_attr_t *__restrict attr, void *(*start_routine)(void *), void *__restrict arg)