X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Feventl.c;h=48c1abdbb7cf54e94ac0ea2e5825d3e9fddec1bc;hb=e94bb57662a692dd4c0502dfb4569bfa8b811d03;hp=40f7a69826d0223ef7660647898e8adced8bf732;hpb=4193aa864cbf4f36d264179f9be1999ce74e77e6;p=pazpar2-moved-to-github.git diff --git a/src/eventl.c b/src/eventl.c index 40f7a69..48c1abd 100644 --- a/src/eventl.c +++ b/src/eventl.c @@ -70,7 +70,8 @@ iochan_man_t iochan_man_create(int no_threads) man->sel_thread = 0; /* can't create sel_thread yet because we may fork */ man->sel_fd = -1; man->no_threads = no_threads; - man->log_level = YLOG_DEBUG; + man->log_level = yaz_log_module_level("iochan"); + return man; } @@ -86,6 +87,7 @@ void iochan_man_destroy(iochan_man_t *mp) while (c) { IOCHAN c_next = c->next; + xfree(c->name); xfree(c); c = c_next; } @@ -101,7 +103,8 @@ void iochan_add(iochan_man_t man, IOCHAN chan) man->channel_list = chan; } -IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags) +IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags, + const char *name) { IOCHAN new_iochan; @@ -118,12 +121,17 @@ IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags) new_iochan->next = NULL; new_iochan->man = 0; new_iochan->thread_users = 0; + new_iochan->name = name ? xstrdup(name) : 0; return new_iochan; } static void work_handler(void *work_data) { IOCHAN p = work_data; + + yaz_log(p->man->log_level, "eventl: work begin chan=%p name=%s event=%d", + p, p->name ? p->name : "", p->this_event); + if (!p->destroyed && (p->this_event & EVENT_TIMEOUT)) (*p->fun)(p, EVENT_TIMEOUT); if (!p->destroyed && (p->this_event & EVENT_INPUT)) @@ -132,6 +140,9 @@ static void work_handler(void *work_data) (*p->fun)(p, EVENT_OUTPUT); if (!p->destroyed && (p->this_event & EVENT_EXCEPT)) (*p->fun)(p, EVENT_EXCEPT); + + yaz_log(p->man->log_level, "eventl: work end chan=%p name=%s event=%d", + p, p->name ? p->name : "", p->this_event); } static void run_fun(iochan_man_t man, IOCHAN p) @@ -140,8 +151,8 @@ static void run_fun(iochan_man_t man, IOCHAN p) { if (man->sel_thread) { - yaz_log(man->log_level, "eventl: add fun chan=%p event=%d", - p, p->this_event); + 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); } @@ -194,10 +205,9 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) { if (man->sel_fd > max) max = man->sel_fd; - yaz_log(man->log_level, "select on sel fd=%d", man->sel_fd); FD_SET(man->sel_fd, &in); } - yaz_log(man->log_level, "select begin"); + yaz_log(man->log_level, "select begin nofds=%d", max); res = select(max + 1, &in, &out, &except, timeout); yaz_log(man->log_level, "select returned res=%d", res); if (res < 0) @@ -220,20 +230,32 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) man->sel_fd); while ((chan = sel_thread_result(man->sel_thread))) { - yaz_log(man->log_level, "eventl: got thread result p=%p", - chan); + yaz_log(man->log_level, "eventl: got thread result chan=%p name=%s", + chan, chan->name ? chan->name : ""); chan->thread_users--; } } } + if (man->log_level) + { + int no = 0; + for (p = *iochans; p; p = p->next) + no++; + yaz_log(man->log_level, "%d channels", no); + } for (p = *iochans; p; p = p->next) { int force_event = p->force_event; time_t now = time(0); - if (p->thread_users > 0 || p->destroyed) + if (p->destroyed) + { + yaz_log(man->log_level, "eventl: skip destroyed chan=%p name=%s", p, p->name ? p->name : ""); + continue; + } + if (p->thread_users > 0) { - yaz_log(man->log_level, "eventl: skip chan=%p users=%d", p, p->thread_users); + yaz_log(man->log_level, "eventl: skip chan=%p name=%s users=%d", p, p->name ? p->name : "", p->thread_users); continue; } p->this_event = 0; @@ -250,13 +272,11 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) if (FD_ISSET(p->fd, &in) || force_event == EVENT_INPUT) { p->last_event = now; - yaz_log(YLOG_DEBUG, "Eventl input event"); p->this_event |= EVENT_INPUT; } if (FD_ISSET(p->fd, &out) || force_event == EVENT_OUTPUT) { p->last_event = now; - yaz_log(YLOG_DEBUG, "Eventl output event"); p->this_event |= EVENT_OUTPUT; } if (FD_ISSET(p->fd, &except) || force_event == EVENT_EXCEPT) @@ -273,6 +293,7 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans) if (p->destroyed && p->thread_users == 0) { *nextp = p->next; + xfree(p->name); xfree(p); } else