1
votes

I have an application that has one main thread which spawns another thread which spawns threads for each request received and I'm getting a core dump probably due to a deadlock. On gdb I see the following:

__lll_lock_wait_private ();
_L_lock_4714 ();
start_thread ();
clone ();

This is generated from the following code sample:

do 
{
    pthread_t handle;
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    pthread_create(&handle, 0, run, msg);
    pthread_detach(handle);
} while (!stop)

run is an extern function while the rest of the code is part of class methods.

void* run(void* arg)
{
    Handler handler;
    Msg* msg = static_cast<Msg*> (arg);

    handler.handleMsg(msg);

    return NULL;
}

handleMsg method does some processing and then call another application thru a system call:

...
system("AnotherApplication param1, param2 &");
...

Note the ampersand. It is on purpose because I want the process to run asynchronously. The response goes thru the main thread thru another type of communication.

This application has been running on Linux:

Linux 2.6.32-358.14.1.el6.x86_64 #1 SMP Mon Jun 17 15:54:20 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux

I'm not ignoring any signals.

What could be the problem here?

1
Is that literally your thread-start loop? Spin up as many as possible, as fast as possible, until a local variable becomes true (which it may never)? - WhozCraig
Do you check the return codes of any of these calls and respond or log them somewhere? - Duck

1 Answers

0
votes

pthread_detach manual informs us:

Attempting to detach an already detached thread results in unspecified behavior.

However, you're creating your threads as detached from the start up.

What results do you expect?