X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=sched.c;h=2501b50c276ad9ec717123f945d4faa9bdd13680;hp=0585162142be5238a7fa463a64f05fa192a6713d;hb=4ca80f239ef2532dfe3af4013eb1d0cd38100185;hpb=01f8023b7fe59abc29072c7b84caec5961f8f14b diff --git a/sched.c b/sched.c index 05851621..2501b50c 100644 --- a/sched.c +++ b/sched.c @@ -8,7 +8,6 @@ #include #include -#include #include "para.h" #include "ipc.h" @@ -37,7 +36,7 @@ static void unregister_task(struct task *t) para_strerror(-t->error)); if (t->pre_select) list_del(&t->pre_select_node); - if (t->post_select) + if (t->new_post_select || t->post_select) list_del(&t->post_select_node); } @@ -63,14 +62,21 @@ static void sched_preselect(struct sched *s) static inline void call_post_select(struct sched *s, struct task *t) { #ifndef SCHED_DEBUG - t->post_select(s, t); + if (t->new_post_select) { + t->error = t->new_post_select(s, t); + return; + } + return t->post_select(s, t); #else struct timeval t1, t2, diff; unsigned long pst; - gettimeofday(&t1, NULL); - t->post_select(s, t); - gettimeofday(&t2, NULL); + clock_get_realtime(&t1); + if (t->new_post_select) + t->error = t->new_post_select(s, t); + else + t->post_select(s, t); + clock_get_realtime(&t2); tv_diff(&t1, &t2, &diff); pst = tv2ms(&diff); if (pst > 50) @@ -120,7 +126,7 @@ again: FD_ZERO(&s->wfds); s->select_timeout = s->default_timeout; s->max_fileno = -1; - gettimeofday(now, NULL); + clock_get_realtime(now); sched_preselect(s); ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds, &s->select_timeout); @@ -136,7 +142,7 @@ again: FD_ZERO(&s->rfds); FD_ZERO(&s->wfds); } - gettimeofday(now, NULL); + clock_get_realtime(now); sched_post_select(s); if (list_empty(&s->pre_select_list) && list_empty(&s->post_select_list)) return 0; @@ -166,7 +172,10 @@ void register_task(struct sched *s, struct task *t) PARA_DEBUG_LOG("pre_select: %p\n", &t->pre_select); list_add_tail(&t->pre_select_node, &s->pre_select_list); } - if (t->post_select) { + if (t->new_post_select) { + PARA_DEBUG_LOG("post_select: %p\n", &t->new_post_select); + list_add_tail(&t->post_select_node, &s->post_select_list); + } else if ((t->post_select)) { PARA_DEBUG_LOG("post_select: %p\n", &t->post_select); list_add_tail(&t->post_select_node, &s->post_select_list); }