#include "list.h"
#include "sched.h"
#include "string.h"
+#include "time.h"
#include "error.h"
static struct list_head pre_select_list, post_select_list;
}
}
+//#define SCHED_DEBUG 1
+static inline void call_post_select(struct sched *s, struct task *t)
+{
+#ifndef SCHED_DEBUG
+ 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);
+ tv_diff(&t1, &t2, &diff);
+ pst = tv2ms(&diff);
+ if (pst > 50)
+ PARA_WARNING_LOG("%s: post_select time: %lums\n",
+ t->status, pst);
+#endif
+}
+
static void sched_post_select(struct sched *s)
{
struct task *t, *tmp;
list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) {
if (t->error >= 0)
- t->post_select(s, t);
+ call_post_select(s, t);
// PARA_INFO_LOG("%s: %d\n", t->status, t->ret);
if (t->error >= 0)
continue;
again:
FD_ZERO(&s->rfds);
FD_ZERO(&s->wfds);
- s->timeout = s->default_timeout;
+ s->select_timeout = s->default_timeout;
s->max_fileno = -1;
gettimeofday(now, NULL);
sched_preselect(s);
if (list_empty(&pre_select_list) && list_empty(&post_select_list))
return 0;
- ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds, &s->timeout);
+ ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds,
+ &s->select_timeout);
if (ret < 0)
return ret;
if (ret == 0) {
*/
void sched_min_delay(struct sched *s)
{
- s->timeout.tv_sec = 0;
- s->timeout.tv_usec = 1;
+ s->select_timeout.tv_sec = 0;
+ s->select_timeout.tv_usec = 1;
}
/**
* Impose an upper bound for the timeout of the next select() call.
*
- * \param timeout Maximal allowed timeout.
+ * \param to Maximal allowed timeout.
* \param s Pointer to the scheduler struct.
*
- * If the current scheduler timeout is already smaller than \a timeout, this
+ * If the current scheduler timeout is already smaller than \a to, this
* function does nothing. Otherwise the timeout for the next select() call is
* set to the given value.
*
* \sa sched_request_timeout_ms().
*/
-void sched_request_timeout(struct timeval *timeout, struct sched *s)
+void sched_request_timeout(struct timeval *to, struct sched *s)
{
- if (tv_diff(&s->timeout, timeout, NULL) > 0)
- s->timeout = *timeout;
+ if (tv_diff(&s->select_timeout, to, NULL) > 0)
+ s->select_timeout = *to;
}
/**