прошёлся по функции pthread_create, выяснилось что она вылетает на
Цитата
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void * (*start_routine)(void *), void *arg)
{
pthread_descr self = thread_self();
struct pthread_request request;
if (__pthread_manager_request < 0) {
if (__pthread_initialize_manager() < 0) return EAGAIN;
}
request.req_thread = self;
request.req_kind = REQ_CREATE;
request.req_args.create.attr = attr;
request.req_args.create.fn = start_routine;
request.req_args.create.arg = arg;
sigprocmask(SIG_SETMASK, (const sigset_t *) NULL,
&request.req_args.create.mask);
PDEBUG("write REQ_CREATE to manager thread\n");
TEMP_FAILURE_RETRY(__libc_write(__pthread_manager_request,
(char *) &request, sizeof(request)));
PDEBUG("before suspend(self)\n");
suspend(self);<<<<<<<<<<<<<<<<<<<вылетает тут
PDEBUG("after suspend(self)\n");
if (THREAD_GETMEM(self, p_retcode) == 0)
*thread = (pthread_t) THREAD_GETMEM(self, p_retval);
printf("exit\n");
return THREAD_GETMEM(self, p_retcode);
}
Цитата
static inline void suspend(pthread_descr self)
{
/* See pthread.c */
#ifdef __NR_rt_sigaction
__pthread_wait_for_restart_signal(self);
#else
__pthread_suspend(self);
#endif
}
Сообщение отредактировал andybeg - Feb 14 2011, 09:34