--- libaitsched/src/hooks.c 2014/06/05 22:16:00 1.27.2.8 +++ libaitsched/src/hooks.c 2014/06/05 22:22:46 1.27.2.9 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: hooks.c,v 1.27.2.8 2014/06/05 22:16:00 misho Exp $ +* $Id: hooks.c,v 1.27.2.9 2014/06/05 22:22:46 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -859,7 +859,7 @@ static inline void fetch_hook_kevent_proceed(int en, struct kevent *res, sched_root_task_t *r) { struct kevent evt[1]; - register int i, flg; + register int i; sched_task_t *task, *tmp; struct timespec now = { 0, 0 }; #ifdef AIO_SUPPORT @@ -880,12 +880,10 @@ fetch_hook_kevent_proceed(int en, struct kevent *res, /* Put read/write task to ready queue */ switch (res[i].filter) { case EVFILT_READ: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_read, task_node, tmp) { if (TASK_FD(task) != ((intptr_t) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } @@ -905,17 +903,12 @@ fetch_hook_kevent_proceed(int en, struct kevent *res, insert_task_to(task, &r->root_ready); } } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; case EVFILT_WRITE: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_write, task_node, tmp) { if (TASK_FD(task) != ((intptr_t) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } @@ -935,87 +928,62 @@ fetch_hook_kevent_proceed(int en, struct kevent *res, insert_task_to(task, &r->root_ready); } } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; case EVFILT_TIMER: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_alarm, task_node, tmp) { if ((uintptr_t) TASK_DATA(task) != ((uintptr_t) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } /* remove alarm handle */ transit_task2ready(task, &r->root_alarm); } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; case EVFILT_VNODE: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_node, task_node, tmp) { if (TASK_FD(task) != ((intptr_t) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } /* remove node handle */ transit_task2ready(task, &r->root_node); } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; case EVFILT_PROC: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_proc, task_node, tmp) { if (TASK_VAL(task) != ((uintptr_t) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } /* remove proc handle */ transit_task2ready(task, &r->root_proc); } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; case EVFILT_SIGNAL: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_signal, task_node, tmp) { if (TASK_VAL(task) != ((uintptr_t) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } /* remove signal handle */ transit_task2ready(task, &r->root_signal); } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; #ifdef AIO_SUPPORT case EVFILT_AIO: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_aio, task_node, tmp) { acb = (struct aiocb*) TASK_VAL(task); if (acb != ((struct aiocb*) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } @@ -1032,19 +1000,14 @@ fetch_hook_kevent_proceed(int en, struct kevent *res, TASK_DATLEN(task) = (u_long) len; TASK_FD(task) = fd; } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; #ifdef EVFILT_LIO case EVFILT_LIO: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_lio, task_node, tmp) { acbs = (struct aiocb**) TASK_VAL(task); if (acbs != ((struct aiocb**) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } @@ -1068,29 +1031,21 @@ fetch_hook_kevent_proceed(int en, struct kevent *res, if (lseek(fd, off + len, SEEK_CUR) == -1) LOGERR; } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; #endif /* EVFILT_LIO */ #endif /* AIO_SUPPORT */ #ifdef EVFILT_USER case EVFILT_USER: - flg = 0; TAILQ_FOREACH_SAFE(task, &r->root_user, task_node, tmp) { if (TASK_VAL(task) != ((uintptr_t) res[i].udata)) continue; else { - flg++; TASK_RET(task) = res[i].data; TASK_FLAG(task) = (u_long) res[i].fflags; } /* remove user handle */ transit_task2ready(task, &r->root_user); } - /* if match at least 2, don't remove resouce of event */ - if (flg > 1) - evt->flags ^= evt->flags; break; #endif /* EVFILT_USER */ }