Skip to content
  • Arnaldo Carvalho de Melo's avatar
    perf tools: Use readdir() instead of deprecated readdir_r() · 2515e614
    Arnaldo Carvalho de Melo authored
    The readdir() function is thread safe as long as just one thread uses a
    DIR, which is the case when synthesizing events for pre-existing threads
    by traversing /proc, so, to avoid breaking the build with glibc-2.23.90
    (upcoming 2.24), use it instead of readdir_r().
    
    See: http://man7.org/linux/man-pages/man3/readdir.3.html
    
    "However, in modern implementations (including the glibc implementation),
    concurrent calls to readdir() that specify different directory streams
    are thread-safe.  In cases where multiple threads must read from the
    same directory stream, using readdir() with external synchronization is
    still preferable to the use of the deprecated readdir_r(3) function."
    
    Noticed while building on a Fedora Rawhide docker container.
    
       CC       /tmp/build/perf/util/event.o
      util/event.c: In function '__event__synthesize_thread':
      util/event.c:466:2: error: 'readdir_r' is deprecated [-Werror=deprecated-declarations]
        while (!readdir_r(tasks, &dirent, &next) && next) {
        ^~~~~
      In file included from /usr/include/features.h:368:0,
                       from /usr/include/stdint.h:25,
                       from /usr/lib/gcc/x86_64-redhat-linux/6.0.0/include/stdint.h:9,
                       from /git/linux/tools/include/linux/types.h:6,
                       from util/event.c:1:
      /usr/include/dirent.h:189:12: note: declared here
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/n/tip-i1vj7nyjp2p750rirxgrfd3c@git.kernel.org
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    2515e614