|
@@ -308,7 +308,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
|
|
|
struct record_opts *opts = &rec->opts;
|
|
|
struct perf_data_file *file = &rec->file;
|
|
|
struct perf_session *session;
|
|
|
- bool disabled = false;
|
|
|
+ bool disabled = false, draining = false;
|
|
|
|
|
|
rec->progname = argv[0];
|
|
|
|
|
@@ -457,7 +457,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
|
|
|
}
|
|
|
|
|
|
if (hits == rec->samples) {
|
|
|
- if (done)
|
|
|
+ if (done || draining)
|
|
|
break;
|
|
|
err = perf_evlist__poll(rec->evlist, -1);
|
|
|
/*
|
|
@@ -467,6 +467,9 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
|
|
|
if (err > 0 || (err < 0 && errno == EINTR))
|
|
|
err = 0;
|
|
|
waking++;
|
|
|
+
|
|
|
+ if (perf_evlist__filter_pollfd(rec->evlist, POLLERR | POLLHUP) == 0)
|
|
|
+ draining = true;
|
|
|
}
|
|
|
|
|
|
/*
|