X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Feventl.c;h=b46ebb3eb190428c57033025ec7f4f58ed798b19;hb=464f19c366e6016b3d18cf1cede3805f922417a8;hp=5c77f49382ba8233a7173a2a1051de014b656b20;hpb=3100e2ef14dfed05d5dd7ede542b78c687c31e38;p=pazpar2-moved-to-github.git diff --git a/src/eventl.c b/src/eventl.c index 5c77f49..b46ebb3 100644 --- a/src/eventl.c +++ b/src/eventl.c @@ -195,16 +195,14 @@ static void work_handler(void *work_data) { } static void run_fun(iochan_man_t man, IOCHAN p) { - if (p->this_event) { - if (man->sel_thread) { - yaz_log(man->log_level, - "eventl: work add chan=%p name=%s event=%d", p, - p->name ? p->name : "", p->this_event); - p->thread_users++; - sel_thread_add(man->sel_thread, p); - } else - work_handler(p); - } + if (man->sel_thread) { + yaz_log(man->log_level, + "eventl: work add chan=%p name=%s event=%d", p, + p->name ? p->name : "", p->this_event); + p->thread_users++; + sel_thread_add(man->sel_thread, p); + } else + work_handler(p); } static int event_loop(iochan_man_t man, IOCHAN *iochans) { @@ -219,7 +217,7 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) { struct timeval *timeout; // struct yaz_poll_fd *fds; - int no_fds = 0; + int i, no_fds = 0; FD_ZERO(&in); FD_ZERO(&out); FD_ZERO(&except); @@ -294,6 +292,7 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) { } yaz_log(man->log_level, "%d channels", no); } + i = 0; for (p = start; p; p = p->next) { time_t now = time(0); @@ -329,7 +328,17 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) { p->this_event |= EVENT_EXCEPT; } } - run_fun(man, p); + /* only fire one Z39.50/SRU socket event.. except for timeout */ + if (p->this_event) { + if (!(p->this_event & EVENT_TIMEOUT) && + !strcmp(p->name, "connection_socket")) { + /* not a timeout and we have a Z39.50/SRU socket */ + if (i == 0) + run_fun(man, p); + i++; + } else + run_fun(man, p); + } } assert(inv_start == start); yaz_mutex_enter(man->iochan_mutex);