lkml.org 
[lkml]   [2016]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 080/116] uml: flush stdout before forking
    Date
    From: Vegard Nossum <vegard.nossum@oracle.com>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit 0754fb298f2f2719f0393491d010d46cfb25d043 upstream.

    I was seeing some really weird behaviour where piping UML's output
    somewhere would cause output to get duplicated:

    $ ./vmlinux | head -n 40
    Checking that ptrace can change system call numbers...Core dump limits :
    soft - 0
    hard - NONE
    OK
    Checking syscall emulation patch for ptrace...Core dump limits :
    soft - 0
    hard - NONE
    OK
    Checking advanced syscall emulation patch for ptrace...Core dump limits :
    soft - 0
    hard - NONE
    OK
    Core dump limits :
    soft - 0
    hard - NONE

    This is because these tests do a fork() which duplicates the non-empty
    stdout buffer, then glibc flushes the duplicated buffer as each child
    exits.

    A simple workaround is to flush before forking.

    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    arch/um/os-Linux/start_up.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c
    index 337518c5042a..b412c62486f0 100644
    --- a/arch/um/os-Linux/start_up.c
    +++ b/arch/um/os-Linux/start_up.c
    @@ -95,6 +95,8 @@ static int start_ptraced_child(void)
    {
    int pid, n, status;

    + fflush(stdout);
    +
    pid = fork();
    if (pid == 0)
    ptrace_child();
    --
    2.7.2
    \
     
     \ /
      Last update: 2016-03-04 11:01    [W:4.142 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site