spandei
spandei

Reputation: 229

Segmentation fault in pthread_create

I'm using pthread_create to use a function from shared library. I receive Segmenation fault after the following code executes:

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
#include<string.h>
#include<pthread.h>
#include<unistd.h>

void (*GetVersion)(char *version);

void* draw(void *arg)
{
    void *handle;
    char *error;    

    handle = dlopen ("libOpenKaillera.so", RTLD_LAZY);
    if (!handle) {
        fputs (dlerror(), stderr);
        exit(1);
    }

    GetVersion = dlsym(handle, "GetVersion");
    if ((error = dlerror()) != NULL)  {
        fputs(error, stderr);
        exit(1);
    }

    char version[4];
    kailleraGetVersion(version);
    puts(version);
    dlclose(handle);
    return NULL;
}

int main(void)
{
    pthread_t tid;

    pthread_create(&tid, NULL, &draw, NULL);        
    sleep(5000);
    return 0;
}

The backtrace command says the following:

#0  0xb68e7be0 in ?? ()
#1  0xb7fa9d56 in __nptl_deallocate_tsd () at pthread_create.c:158
#2  0xb7fa9f83 in start_thread (arg=0xb7df0b40) at pthread_create.c:325
#3  0xb7ede4ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129

I don't understand what a reason can cause this. Can you help me please?

Upvotes: 0

Views: 2050

Answers (1)

Peixu Zhu
Peixu Zhu

Reputation: 2151

after each calling of pthread_create, please remember to call pthread_join or pthread_detach to tell the thread how to perform termination. normally, please call pthread_join before exiting the creating thread (in this case, it is function main).

Upvotes: 2

Related Questions