From f8eb54536cfcca2385438d828dbc926ff0244608 Mon Sep 17 00:00:00 2001 From: SunKyu Date: Wed, 14 Oct 2015 04:47:05 -0700 Subject: [PATCH] perf_reader : add timeout argument to perf_reader_poll --- src/cc/perf_reader.c | 4 ++-- src/cc/perf_reader.h | 2 +- src/python/bcc/__init__.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cc/perf_reader.c b/src/cc/perf_reader.c index c7aa054..9a9e891 100644 --- a/src/cc/perf_reader.c +++ b/src/cc/perf_reader.c @@ -205,11 +205,11 @@ static void event_read(struct perf_reader *reader) { } } -int perf_reader_poll(int num_readers, struct perf_reader **readers) { +int perf_reader_poll(int num_readers, struct perf_reader **readers, int timeout) { struct pollfd pfds[] = { {readers[0]->fd, POLLIN}, }; - if (poll(pfds, num_readers, -1) > 0) { + if (poll(pfds, num_readers, timeout) > 0) { int i; for (i = 0; i < num_readers; ++i) { if (pfds[i].revents & POLLIN) diff --git a/src/cc/perf_reader.h b/src/cc/perf_reader.h index 8effd9b..024c71f 100644 --- a/src/cc/perf_reader.h +++ b/src/cc/perf_reader.h @@ -19,4 +19,4 @@ struct perf_reader; struct perf_reader * perf_reader_new(int fd, int page_cnt, perf_reader_cb cb, void *cb_cookie); void perf_reader_free(void *ptr); int perf_reader_mmap(struct perf_reader *reader, int fd, unsigned long sample_type); -int perf_reader_poll(int num_readers, struct perf_reader **readers); +int perf_reader_poll(int num_readers, struct perf_reader **readers, int timeout); diff --git a/src/python/bcc/__init__.py b/src/python/bcc/__init__.py index ac9922b..001610d 100644 --- a/src/python/bcc/__init__.py +++ b/src/python/bcc/__init__.py @@ -94,7 +94,7 @@ lib.bpf_attach_kprobe.argtypes = [ct.c_int, ct.c_char_p, ct.c_char_p, ct.c_int, lib.bpf_detach_kprobe.restype = ct.c_int lib.bpf_detach_kprobe.argtypes = [ct.c_char_p] lib.perf_reader_poll.restype = ct.c_int -lib.perf_reader_poll.argtypes = [ct.c_int, ct.POINTER(ct.c_void_p)] +lib.perf_reader_poll.argtypes = [ct.c_int, ct.POINTER(ct.c_void_p), ct.c_int] lib.perf_reader_free.restype = None lib.perf_reader_free.argtypes = [ct.c_void_p] @@ -780,7 +780,7 @@ class BPF(object): """ return len(open_kprobes) - def kprobe_poll(self): + def kprobe_poll(self, timeout = -1): """kprobe_poll(self) Poll from the ring buffers for all of the open kprobes, calling the @@ -790,7 +790,7 @@ class BPF(object): for i, v in enumerate(open_kprobes.values()): readers[i] = v try: - lib.perf_reader_poll(len(open_kprobes), readers) + lib.perf_reader_poll(len(open_kprobes), readers, timeout) except KeyboardInterrupt: pass -- 2.7.4