Задача в том, чтобы передать в поток лямбда функцию для обработки, например, события завершения потока (onload, а может и onprogress).
Делаю это так:
struct Arg {
void (*func)();
};
void* threadFunction(void *arg) {
((Arg*) arg)->func();
}
void Network::open(const char * url, void (*onload)()) {
Arg* arg;
arg->func = onload; /// сюда передается какая-то лямбда из внешнего метода []() { };
pthread_attr_init(&attr);
rc = pthread_create(&thread[0], &attr, threadFunction, arg);
if (rc) {
Logger::log("ERROR; return code from pthread_create() is %d\n", rc);
return;
}
pthread_attr_destroy(&attr);
}
И не дождавшись завершения потока получаю
RUN FINISHED; Segmentation fault; core dumped;, причем это происходит через раз.
Получается, onload удаляется так и не дождавшись выполнения потока, хотя как раз таки необходимо чтобы она сохранялась. Как это решить?