• Changbin Du's avatar
    perf trace: Avoid early exit due SIGCHLD from non-workload processes · de9f498d
    Changbin Du authored
    The function trace__symbols_init() runs "perf-read-vdso32" and that ends up
    with a SIGCHLD delivered to 'perf'. And this SIGCHLD make perf exit early.
    
    'perf trace' should exit only if the SIGCHLD is from our workload process.
    So let's use sigaction() instead of signal() to match such condition.
    
    Committer notes:
    
    Use memset to zero the 'struct sigaction' variable as the '= { 0 }'
    method isn't accepted in many compiler versions, e.g.:
    
       4    34.02 alpine:3.6                    : FAIL clang version 4.0.0 (tags/RELEASE_400/final)
        builtin-trace.c:4897:35: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
                struct sigaction sigchld_act = { 0 };
                                                 ^
                                                 {}
        builtin-trace.c:4897:37: error: missing field 'sa_mask' initializer [-Werror,-Wmissing-field-initializers]
                struct sigaction sigchld_act = { 0 };
                                                   ^
        2 errors generated.
       6    32.60 alpine:3.8                    : FAIL gcc version 6.4.0 (Alpine 6.4.0)
        builtin-trace.c:4897:35: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
                struct sigaction sigchld_act = { 0 };
                                                 ^
                                                 {}
        builtin-trace.c:4897:37: error: missing field 'sa_mask' initializer [-Werror,-Wmissing-field-initializers]
                struct sigaction sigchld_act = { 0 };
                                                   ^
        2 errors generated.
       7    34.82 alpine:3.9                    : FAIL gcc version 8.3.0 (Alpine 8.3.0)
        builtin-trace.c:4897:35: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
                struct sigaction sigchld_act = { 0 };
                                                 ^
                                                 {}
        builtin-trace.c:4897:37: error: missing field 'sa_mask' initializer [-Werror,-Wmissing-field-initializers]
                struct sigaction sigchld_act = { 0 };
                                                   ^
        2 errors generated.
    Signed-off-by: default avatarChangbin Du <changbin.du@gmail.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20220208140725.3947-1-changbin.du@gmail.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    de9f498d
builtin-trace.c 148 KB