+static struct list_head pre_select_list, post_select_list;
+static int initialized;
+
+static struct timeval now_struct;
+struct timeval *now = &now_struct;
+
+/**
+ * Remove a task from the scheduler.
+ *
+ * \param t The task to remove.
+ *
+ * If the pre_select pointer of \a t is not \p NULL, it is removed from
+ * the pre_select list of the scheduler. Same goes for \a post_select.
+ */
+static void unregister_task(struct task *t)
+{
+ if (!initialized)
+ return;
+ PARA_INFO_LOG("unregistering %s (%s)\n", t->status,
+ t->error <0? para_strerror(-t->error) : "shutdown");
+ if (t->pre_select)
+ list_del(&t->pre_select_node);
+ if (t->post_select)
+ list_del(&t->post_select_node);
+ t->error = -E_TASK_UNREGISTERED;
+}
+