aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/builtin-record.c7
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 /*