aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/evlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/evlist.c')
-rw-r--r--tools/perf/util/evlist.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 6689378ee577..51ead577533f 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1868,12 +1868,12 @@ static void *perf_evlist__poll_thread(void *arg)
1868{ 1868{
1869 struct perf_evlist *evlist = arg; 1869 struct perf_evlist *evlist = arg;
1870 bool draining = false; 1870 bool draining = false;
1871 int i; 1871 int i, done = 0;
1872
1873 while (!done) {
1874 bool got_data = false;
1872 1875
1873 while (draining || !(evlist->thread.done)) { 1876 if (evlist->thread.done)
1874 if (draining)
1875 draining = false;
1876 else if (evlist->thread.done)
1877 draining = true; 1877 draining = true;
1878 1878
1879 if (!draining) 1879 if (!draining)
@@ -1894,9 +1894,13 @@ static void *perf_evlist__poll_thread(void *arg)
1894 pr_warning("cannot locate proper evsel for the side band event\n"); 1894 pr_warning("cannot locate proper evsel for the side band event\n");
1895 1895
1896 perf_mmap__consume(map); 1896 perf_mmap__consume(map);
1897 got_data = true;
1897 } 1898 }
1898 perf_mmap__read_done(map); 1899 perf_mmap__read_done(map);
1899 } 1900 }
1901
1902 if (draining && !got_data)
1903 break;
1900 } 1904 }
1901 return NULL; 1905 return NULL;
1902} 1906}