Messages in this thread | | | Date | Wed, 20 May 2020 12:47:04 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH v3] perf record: Use an eventfd to wakeup when done |
| |
Em Wed, May 13, 2020 at 01:39:41PM +0200, Jiri Olsa escreveu: > On Wed, May 13, 2020 at 12:20:23PM +1000, Anand K Mistry wrote: > > The setting and checking of 'done' contains a rare race where the signal > > handler setting 'done' is run after checking to break the loop, but > > before waiting in evlist__poll(). In this case, the main loop won't wake > > up until either another signal is sent, or the perf data fd causes a > > wake up. > > > > The following simple script can trigger this condition (but you might > > need to run it for several hours): > > for ((i = 0; i >= 0; i++)) ; do > > echo "Loop $i" > > delay=$(echo "scale=4; 0.1 * $RANDOM/32768" | bc) > > ./perf record -- sleep 30000000 >/dev/null& > > pid=$! > > sleep $delay > > kill -TERM $pid > > echo "PID $pid" > > wait $pid > > done > > > > At some point, the loop will stall. Adding logging, even though perf has > > received the SIGTERM and set 'done = 1', perf will remain sleeping until > > a second signal is sent. > > > > Signed-off-by: Anand K Mistry <amistry@google.com> > > > > --- > > > > Changes in v3: > > - Move done_fd creation to below session initialisation > > - Close done_fd on exit > > - Log errno when write(done_fd) fails > > Acked-by: Jiri Olsa <jolsa@redhat.com>
I've made this dependent on HAVE_EVENTFD_SUPPORT, so that it continues building on older systems,
- Arnaldo
| |