}
}
-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)
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);
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]
"""
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
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