diff options
Diffstat (limited to 'tools/perf/builtin-record.c')
-rw-r--r-- | tools/perf/builtin-record.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index a8c2e9dfb125..320b198b54dd 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -308,7 +308,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) | |||
308 | struct record_opts *opts = &rec->opts; | 308 | struct record_opts *opts = &rec->opts; |
309 | struct perf_data_file *file = &rec->file; | 309 | struct perf_data_file *file = &rec->file; |
310 | struct perf_session *session; | 310 | struct perf_session *session; |
311 | bool disabled = false; | 311 | bool disabled = false, draining = false; |
312 | 312 | ||
313 | rec->progname = argv[0]; | 313 | rec->progname = argv[0]; |
314 | 314 | ||
@@ -457,7 +457,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) | |||
457 | } | 457 | } |
458 | 458 | ||
459 | if (hits == rec->samples) { | 459 | if (hits == rec->samples) { |
460 | if (done) | 460 | if (done || draining) |
461 | break; | 461 | break; |
462 | err = perf_evlist__poll(rec->evlist, -1); | 462 | err = perf_evlist__poll(rec->evlist, -1); |
463 | /* | 463 | /* |
@@ -467,6 +467,9 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) | |||
467 | if (err > 0 || (err < 0 && errno == EINTR)) | 467 | if (err > 0 || (err < 0 && errno == EINTR)) |
468 | err = 0; | 468 | err = 0; |
469 | waking++; | 469 | waking++; |
470 | |||
471 | if (perf_evlist__filter_pollfd(rec->evlist, POLLERR | POLLHUP) == 0) | ||
472 | draining = true; | ||
470 | } | 473 | } |
471 | 474 | ||
472 | /* | 475 | /* |