This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CERuntime_init hangs when running program as a Linux daemon process



Hi

I'm writing a Gstreamer based application for DM6443. I'm using Linux and DVSDK 2.00.00.15

When I run my application as a 'normal' process it works fine, but if I run it as a Linux daemon it hangs on the call to CERuntime_init(). If I set 'CE_DEBUG=3' I get the following output:

@0,875,675us: [+4 T:0x00000400 S:0xbeb7c814] OG - Global_init> This program was built with the following packages:
@0,888,386us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package gnu.targets.rts470uC (/home/patrickr/work/ronaldinho/p7701_2/tools/xdctools/packages/gnu/targets/rts470uC/) [1,0,0,0,1225517439692]
@0,889,035us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.codecs.h264dec (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/sdo/codecs/h264dec/) [1,0,0,1246950500000]
@0,889,576us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.codecs.mpeg4dec (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/sdo/codecs/mpeg4dec/) [1,0,0,1246950507000]
@0,890,096us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.fae.codecs.jpegdec (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/fae/codecs/jpegdec/) [1,0,0,1247756037523]
@0,890,619us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.codecs.aachedec (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/sdo/codecs/aachedec/) [1,0,0,1246950490000]
@0,891,126us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.global (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/global/) [1,0,0,1240276693464]
@0,891,630us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.xdais.dm (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/xdais/packages/ti/xdais/dm/) [1,0,5,1236972452910]
@0,892,135us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.utils.trace (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/framework_components/packages/ti/sdo/utils/trace/) [1,0,0,1240266922890]
@0,892,647us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.utils.xdm (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/utils/xdm/) [1,0,2,1240276919490]
@0,893,153us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package dsplink.gpp (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dsplink-1_61_03-prebuilt/packages/dsplink/gpp/) [5,0,0,1241779546000]
@0,893,650us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.linuxutils.cmem (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/linuxutils/packages/ti/sdo/linuxutils/cmem/) [2,2,0,1240253001679]
@0,894,154us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package gnu.targets (/home/patrickr/work/ronaldinho/p7701_2/tools/xdctools/packages/gnu/targets/) [1,0,1,1225517427930]
@0,894,645us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.xdais (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/xdais/packages/ti/xdais/) [1,2,1,1236972427008]
@0,895,146us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.node (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/node/) [1,0,0,1240276734858]
@0,895,656us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.fc.global (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/framework_components/packages/ti/sdo/fc/global/) [1,0,0,1240266696499]
@0,896,168us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.fc.dman3 (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/framework_components/packages/ti/sdo/fc/dman3/) [1,0,4,1240266658662]
@0,896,677us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.fc.memutils (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/framework_components/packages/ti/sdo/fc/memutils/) [1,0,0,1240266801007]
@0,897,181us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.fc.acpy3 (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/framework_components/packages/ti/sdo/fc/acpy3/) [1,0,4,1240266659108]
@0,897,685us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.catalog.c470 (/home/patrickr/work/ronaldinho/p7701_2/tools/xdctools/packages/ti/catalog/c470/) [1,0,1,0,0]
@0,901,423us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.platforms.evmDM6446 (/home/patrickr/work/ronaldinho/p7701_2/tools/xdctools/packages/ti/platforms/evmDM6446/) [1,0,0,1,0]
@0,917,530us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.osal (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/osal/) [2,0,2,1240276730877]
@0,933,477us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.osal.linux (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/osal/linux/) [2,0,1,1240276736840]
@0,938,963us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.ipc (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/ipc/) [2,0,1,1240276698961]
@0,939,519us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.ipc.dsplink (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/ipc/dsplink/) [2,0,1,1240276714152]
@0,940,098us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.alg (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/alg/) [1,0,1,1240276276798]
@0,940,640us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/) [1,0,6,1240276276491]
@0,941,186us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.video2 (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/video2/) [1,0,2,1240276933444]
@0,941,741us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.codecs.h264dec.ce (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/sdo/codecs/h264dec/ce/) [1,0,0,1246950500000]
@0,942,285us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.codecs.mpeg4dec.ce (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/sdo/codecs/mpeg4dec/ce/) [1,0,0,1246950507000]
@0,942,843us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.image1 (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/image1/) [1,0,1,1240276698808]
@0,943,385us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.fae.codecs.jpegdec.ce (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/fae/codecs/jpegdec/ce/) [1,0,0,1247756044241]
@0,943,925us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.audio1 (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/audio1/) [1,0,1,1240276296900]
@0,944,471us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.codecs.aachedec.ce (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dm6446_dvsdk_combos_2_05/packages/ti/sdo/codecs/aachedec/ce/) [1,0,0,1246950495000]
@0,945,015us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.speech (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/speech/) [1,0,2,1240276762193]
@0,945,561us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.speech1 (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/speech1/) [1,0,1,1240276763928]
@0,946,096us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.audio (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/audio/) [1,0,2,1240276296374]
@0,946,646us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.video (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/video/) [1,0,3,1240276930771]
@0,947,197us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.video1 (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/video1/) [1,0,2,1240276935900]
@0,947,743us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.image (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/image/) [1,0,3,1240276700525]
@0,953,742us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.dmai (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/dmai/packages/ti/sdo/dmai/) [1,0,0,1248692800000]
@0,959,266us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.bioslog (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/bioslog/) [1,0,1,1240276303166]
@0,959,794us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package ti.sdo.ce.utils.trace (/home/patrickr/work/ronaldinho/p7701_2/libs/ti/dvsdk/dvsdk/codec_engine/packages/ti/sdo/ce/utils/trace/) [1,0,1,1240276915917]
@0,960,300us: [+4 T:0x00000400 S:0xbeb7c814] OG -     package gstticodecplugin_dm6446 (/home/patrickr/work/ronaldinho/p7701_2/libs/gst-plugins-ti/build/armv5-axis-linux-gnueabiuclibc/src/gstticodecplugin_dm6446/) []
@0,960,898us: [+0 T:0x00000400 S:0xbeb7c814] OG - Global_atexit> enter (fxn=0x405d8600)
@0,961,493us: [+0 T:0x00000400 S:0xbeb7c814] OG - Global_atexit> enter (fxn=0x405d7b94)
@0,962,052us: [+0 T:0x00000400 S:0xbeb7c7f4] OM - Memory_alloc> Enter(0x18)
@0,962,596us: [+0 T:0x00000400 S:0xbeb7c7f4] OM - Memory_alloc> return (0x8b160)
@0,963,213us: [+0 T:0x00000400 S:0xbeb7c80c] OG - Global_atexit> enter (fxn=0x405d5f64)
@0,963,869us: [+0 T:0x00000400 S:0xbeb7c7ec] OM - Memory_alloc> Enter(0x18)
@0,964,434us: [+0 T:0x00000400 S:0xbeb7c7ec] OM - Memory_alloc> return (0x8b1b0)
@0,964,947us: [+0 T:0x00000400 S:0xbeb7c804] OG - Global_atexit> enter (fxn=0x405d509c)
@0,965,522us: [+0 T:0x00000400 S:0xbeb7c804] OG - Global_atexit> enter (fxn=0x405d73ac)
@0,966,145us: [+0 T:0x00000400 S:0xbeb7c80c] ti.sdo.ce.osal.Sem - Sem_create> count: 0
@0,966,725us: [+0 T:0x00000400 S:0xbeb7c7fc] OM - Memory_alloc> Enter(0x14)
@0,967,222us: [+0 T:0x00000400 S:0xbeb7c7fc] OM - Memory_alloc> return (0x8b230)
@0,967,736us: [+0 T:0x00000400 S:0xbeb7c80c] ti.sdo.ce.osal.Sem - Leaving Sem_create> sem[0x8b230]
@0,972,890us: [+0 T:0x00000400 S:0xbeb7c80c] ti.sdo.ce.osal.Sem - Sem_create> count: 0
@0,988,631us: [+0 T:0x00000400 S:0xbeb7c7fc] OM - Memory_alloc> Enter(0x14)
@0,989,233us: [+0 T:0x00000400 S:0xbeb7c7fc] OM - Memory_alloc> return (0x8b248)
@0,989,792us: [+0 T:0x00000400 S:0xbeb7c80c] ti.sdo.ce.osal.Sem - Leaving Sem_create> sem[0x8b248]
@0,990,341us: [+0 T:0x00000400 S:0xbeb7c7f4] OM - Memory_alloc> Enter(0x18)
@0,990,885us: [+0 T:0x00000400 S:0xbeb7c7f4] OM - Memory_alloc> return (0x8b260)
@0,991,430us: [+0 T:0x00000400 S:0xbeb7c7e4] OT - Thread_create> Enter (fxn=0x405d3be8, attrs=0x0)
@0,992,013us: [+0 T:0x00000400 S:0xbeb7c7d4] OM - Memory_alloc> Enter(0x64)
@0,992,570us: [+0 T:0x00000400 S:0xbeb7c7d4] OM - Memory_alloc> return (0x8b280)
@0,994,552us: [+1 T:0x00000402 S:0xbe3ffccc] OP - daemon> thread created.
@0,995,195us: [+0 T:0x00000402 S:0xbe3ffccc] OP - getCmd_d> Enter (proc=0xbe3ffd30)
@0,995,760us: [+0 T:0x00000402 S:0xbe3ffcb4] ti.sdo.ce.osal.Sem - Entered Sem_pend> sem[0x8b230] timeout[0xffffffff]

 

and then it hangs. Any ideas what could be wrong ?

Thanks

/Patrick

 

  • Patrick,

    I don't know what might be wrong, but hopefully can help you get to the answer...

    You say it hangs when you run it as a DAEMON.  What exactly do you mean by that?  Do you fork() and then exit the parent process?  Have you closed your stdin/stdout/stderr?  I'm not sure how you get output if you've closed stdout.

    The place where the log stops looks to be the end of Processor_init().  It creates its own "daemon" thread using Thread_create() from CE's OSAL, which calls down to pthread_create() on Linux.  I wonder if creating a pthread under a "daemon"-style process has issues (hence my questions about how you made it a "daemon".

    Can you look to see what's after the call to Processor_init() in CERuntime_init()?  CERuntime_init() is defined in the file
        <app_dir>/package/cfg/<app_name>_<app_extension>.c
    for example, if I'm creating
        <app_dir>/bin/app_remote.xv5T
    then the file containing CERuntime_init() is
        <app_dir>/package/cfg/bin/app_remote_xv5T.c
    I'm asking this so I can get a sense of whether the init processing proceeds past Processor_init() and hangs in the next "init" function, or if it never gets back from Processor_init().

    Regards,

    - Rob

  • I use the linux daemon() system call which does a fork and the causes the parent to call _exit() The daemon function also lets you choose if stdin/stdout/stderr should be closed or left open. Originally they where all closed, but to be able to debug what was going on I changed so they are now left open.

    My CERuntime_init function looks like this:

    Void CERuntime_init(Void)
    {
        extern Void IPC_generatedInit();

        GT_init();



        /* allow user to over-ride via CE_TRACE. */
        GT_set(Global_getenv("CE_TRACE"));
    //% print("CERuntime.xdt: Engine.hasServer() = " + Engine.hasServer() +
    //%       " Server.$used = " + Server.$used);
        IPC_generatedInit();
        Global_init();

        Sem_init();
        SemMP_init();


        Memory_init();
        Comm_init();
        Thread_init();
        Processor_init();
        LockMP_init();  /* Must be called before DMAN3_init() */
        Algorithm_init();
        XdmUtils_init();
        Lock_init();

        RMS_init();
        Global_atexit((Fxn)RMS_exit);
        Engine_init();
        Server_init();

        /* init code contribution from ti.sdo.ce.bioslog */
        {
            extern Void LogServer_initGenerated();
            LogServer_initGenerated();
        }


    }

    Thanks

    /Patrick

  • Thanks for providing the listing.  It turns out that the "next" output that I was probing for would actually come from the Processor_init() itself - it calls Thread_create(), which launches the CE daemon thread through the pthread_create() Linux call, then the daemon thread runs to the Sem_pend() that you see as the last line in your CE_DEBUG output, after which the parent thread should be returned to and it should then print "Thread_create> Exit..." followed by a "Global_atexit()" trace from Processor_init, followed by the rest of the "init" function prints.

    I have no clue as to why the parent thread was not reactivated once the child thread blocked on the semaphore.  Can you do some "probing" to get a clue as to what state the parent thread is in?  Perhaps running under gdb would provide some clues, or maybe "%ps" would tell us something useful.

    Regards,

    - Rob

  • Hello,

    I'll butt in a bit here since Patrick is off on vacation for 2 weeks. I work on the same project as Patrick and we've both looked into this.

    We've currently been unable to get instrumented code into the actual object code of the codec engine used on the device. Not 100% familiar with how the object code gets built and included into the final *.x64P binary from f.ex. codec_engine/packages/ti/sdo/ce/ipc/dsplink/ code. Working on that bit.

    I have, however, found something pretty strange on the linux side, using strace. This is a small excerpt of a strace log from a non-functioning(we daemonize via double fork()) run of our application:

    ---

    1087 0.001322 open("/dev/cmem", O_RDWR) = 12
    1087 0.001150 ioctl(12, 0x8, 0xbeb2e854) = 0
    1087 0.000961 fcntl(12, F_GETFD) = 0
    1087 0.000862 fcntl(12, F_SETFD, FD_CLOEXEC) = 0
    1087 0.001147 brk(0x89000) = 0x89000
    1087 0.000960 pipe([13, 14]) = 0
    1087 0.001052 clone(child_stack=0x88fe0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 1088
    1087 0.001067 write(14, "\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00"..., 148) = 148
    1087 0.001558 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
    1087 0.001147 write(14, "\x60\x03\x38\x40\x00\x00\x00\x00\x74\x56\x08\x00\x24\xb4"..., 148) = 148
    1087 0.001553 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
    1087 0.001082 rt_sigsuspend([] <unfinished ...>
    1088 0.000918 rt_sigprocmask(SIG_SETMASK, ~[TRAP RT_1], NULL, 8) = 0
    1088 0.001206 read(13, "\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00"..., 148) = 148
    1088 0.001502 poll([{fd=13, events=POLLIN, revents=POLLIN}], 1, 2000) = 1
    1088 0.001089 getppid() = 1087
    1088 0.000851 read(13, "\x60\x03\x38\x40\x00\x00\x00\x00\x74\x56\x08\x00\x24\xb4"..., 148) = 148
    1088 0.001789 mmap2(0xbe3fc000, 16384, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0) = 0xbe3fc000
    1088 0.001149 clone(child_stack=0xbe3ffe18, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGRT_1) = 1089
    1088 0.001103 kill(1084, SIGRTMIN) = -1 ESRCH (No such process)
    1088 0.000893 poll( <unfinished ...>
    1089 0.000734 getpid() = 1089
    1089 0.000846 rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
    1089 0.001097 sched_setscheduler(1089, SCHED_OTHER, { 0 }) = 0
    1089 0.001049 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
    1089 0.001073 rt_sigsuspend([] <unfinished ...>
    1088 2.000495 <... poll resumed> [{fd=13, events=POLLIN}], 1, 2000) = 0
    1088 0.000757 getppid() = 1087
    1088 0.000852 poll([{fd=13, events=POLLIN}], 1, 2000) = 0
    1088 2.008022 getppid() = 1087
    1088 0.000854 poll([{fd=13, events=POLLIN}], 1, 2000) = 0

    etc
    ---

    The thread feeding the pipe is never woken, as the system tries to make the wrong thread (pid 1084, which doesnt exist any more after daemonization) continue. Pid 1084 is actually the initial process, now defunct, as a result of daemonization.

    Same place; without daemonization:

    ---

     1427 0.001099 open("/dev/cmem", O_RDWR) = 12
    1427 0.001161 ioctl(12, 0x8, 0xbe957854) = 0
    1427 0.000953 fcntl(12, F_GETFD) = 0
    1427 0.000877 fcntl(12, F_SETFD, FD_CLOEXEC) = 0
    1427 0.001157 brk(0x89000) = 0x89000
    1427 0.000949 pipe([13, 14]) = 0
    1427 0.001034 clone(child_stack=0x88fe0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 1440
    1427 0.001070 write(14, "\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00"..., 148 <unfinished ...>
    1440 0.003404 rt_sigprocmask(SIG_SETMASK, ~[TRAP RT_1], NULL, 8) = 0
    1440 0.001183 read(13, <unfinished ...>
    1427 0.002889 <... write resumed> ) = 148
    1427 0.000517 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
    1427 0.001078 write(14, "\x60\x03\x38\x40\x00\x00\x00\x00\xdc\x52\x08\x00\x24\xb4"..., 148) = 148
    1440 0.001896 <... read resumed> "\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00"..., 148) = 148
    1440 0.001147 poll([{fd=13, events=POLLIN, revents=POLLIN}], 1, 2000) = 1
    1440 0.001037 getppid() = 1427
    1440 0.000796 read(13, "\x60\x03\x38\x40\x00\x00\x00\x00\xdc\x52\x08\x00\x24\xb4"..., 148) = 148
    1440 0.001466 mmap2(0xbe1fc000, 16384, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0) = 0xbe1fc000
    1440 0.001108 clone(child_stack=0xbe1ffe18, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGRT_1) = 1441
    1441 0.001078 getpid() = 1441
    1441 0.000786 rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
    1441 0.001036 sched_setscheduler(1441, SCHED_OTHER, { 0 }) = 0
    1441 0.001458 rt_sigprocmask(SIG_SETMASK, NULL, <unfinished ...>
    1427 0.000363 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
    1427 0.001060 rt_sigsuspend([] <unfinished ...>
    1441 0.000624 <... rt_sigprocmask resumed> [RTMIN], 8) = 0
    1441 0.000752 rt_sigsuspend([] <unfinished ...>
    1440 0.000932 kill(1427, SIGRTMIN) = 0
    1440 0.000894 poll( <unfinished ...>
    1427 0.000437 --- SIGRTMIN (Unknown signal 32) @ 0 (0) ---
    1427 0.000356 <... rt_sigsuspend resumed> ) = 32
    ---

    Here the initial process/thread is woken and work continues as it's supposed to. Currently I can only speculate to why the system tries to wake the wrong thread. Do you have any comments regarding this?

    Both strace logs can be provided if you want them.

    /Anders