Basically my program looks like this:

static volatile sig_atomic_t child_terminated=0;

void sigchld_handler(int sig) {
    int copy_errno=errno;
    debug("Received SIGCHLD");
    child_terminated=1;
    signal(SIGCHLD,sigchld_handler);
    errno=copy_errno;
}

int main() {
    signal(SIGCHLD,sigchld_handler);
    for(;;) {
        /* do some heavy weight stuff */
        /* check for child_terminated and perform waitpid */
}

Maybe the debug-call is the reason. It is sending the String to the local 
syslog-daemon, using sockets and therefore a bunch of system calls. When I 
consider strace, I see the arrival of SIGCHLD and the futex call directly 
behind it. 
When the futex call is performed, the 3rd argument is a "2". I verified it 
using PTRACE_PEEKDATA on the 1st argument (which is the address of the futex 
value). It really is a "2". Do you know what this "2" exactly means? Does it 
mean one process blocked a ressource and another one is now suspended? What 
happens if I write a "1" to the futex address?

Thanks a lot for answers ;-)

-- 
Futex hang when exiting using the window close button
https://bugs.launchpad.net/bugs/57731
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to