From 132e81a5c88acfdb603b7aac8800866536e5b8ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Mon, 22 Feb 2010 20:02:32 +0000 Subject: [PATCH] Avoid cycling thru table filters too fast if we are short on hardware filters. It might overload the DVB adapter --- src/dvb/dvb_tables.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/dvb/dvb_tables.c b/src/dvb/dvb_tables.c index 664ddc5d..89f6ba34 100644 --- a/src/dvb/dvb_tables.c +++ b/src/dvb/dvb_tables.c @@ -237,6 +237,7 @@ dvb_table_input(void *aux) uint8_t sec[4096]; th_dvb_mux_instance_t *tdmi; th_dvb_table_t *tdt; + int64_t cycle_barrier = 0; while(1) { x = epoll_wait(tda->tda_table_epollfd, ev, sizeof(ev) / sizeof(ev[0]), -1); @@ -261,10 +262,11 @@ dvb_table_input(void *aux) if(tdt != NULL) { dvb_proc_table(tdmi, tdt, sec, r); - /* Any tables pending (that wants a filter/fd) */ - if(TAILQ_FIRST(&tdmi->tdmi_table_queue) != NULL) { + /* Any tables pending (that wants a filter/fd), close this one */ + if(TAILQ_FIRST(&tdmi->tdmi_table_queue) != NULL && + cycle_barrier < getmonoclock()) { tdt_close_fd(tdmi, tdt); - + cycle_barrier = getmonoclock() + 100000; tdt = TAILQ_FIRST(&tdmi->tdmi_table_queue); assert(tdt != NULL);