From: Christian Grothoff Date: Thu, 19 Apr 2012 12:09:50 +0000 (+0000) Subject: -fixing #2274 X-Git-Tag: initial-import-from-subversion-38251~13878 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=fbe8da45a9b682f3cbb921e2ea6537ef558d64f3;p=oweals%2Fgnunet.git -fixing #2274 --- diff --git a/src/util/scheduler.c b/src/util/scheduler.c index 8d3106032..6b8d21443 100644 --- a/src/util/scheduler.c +++ b/src/util/scheduler.c @@ -114,11 +114,6 @@ struct Task */ GNUNET_SCHEDULER_TaskIdentifier id; - /** - * Identifier of a prerequisite task. - */ - GNUNET_SCHEDULER_TaskIdentifier prereq_id; - /** * Absolute timeout value for the task, or * GNUNET_TIME_UNIT_FOREVER_ABS for "no timeout". @@ -215,13 +210,6 @@ static struct Task *ready[GNUNET_SCHEDULER_PRIORITY_COUNT]; */ static GNUNET_SCHEDULER_TaskIdentifier last_id; -/** - * Highest number so that all tasks with smaller identifiers - * have already completed. Also the lowest number of a task - * still waiting to be executed. - */ -static GNUNET_SCHEDULER_TaskIdentifier lowest_pending_id; - /** * Number of tasks on the ready list. */ @@ -292,60 +280,6 @@ check_priority (enum GNUNET_SCHEDULER_Priority p) } -/** - * Is a task with this identifier still pending? Also updates - * "lowest_pending_id" as a side-effect (for faster checks in the - * future), but only if the return value is "GNUNET_NO" (and - * the "lowest_pending_id" check failed). - * - * @param id which task are we checking for - * @return GNUNET_YES if so, GNUNET_NO if not - */ -static int -is_pending (GNUNET_SCHEDULER_TaskIdentifier id) -{ - struct Task *pos; - enum GNUNET_SCHEDULER_Priority p; - GNUNET_SCHEDULER_TaskIdentifier min; - - if (id < lowest_pending_id) - return GNUNET_NO; - min = -1; /* maximum value */ - pos = pending; - while (pos != NULL) - { - if (pos->id == id) - return GNUNET_YES; - if (pos->id < min) - min = pos->id; - pos = pos->next; - } - pos = pending_timeout; - while (pos != NULL) - { - if (pos->id == id) - return GNUNET_YES; - if (pos->id < min) - min = pos->id; - pos = pos->next; - } - for (p = 0; p < GNUNET_SCHEDULER_PRIORITY_COUNT; p++) - { - pos = ready[p]; - while (pos != NULL) - { - if (pos->id == id) - return GNUNET_YES; - if (pos->id < min) - min = pos->id; - pos = pos->next; - } - } - lowest_pending_id = min; - return GNUNET_NO; -} - - /** * Update all sets and timeout for select. * @@ -374,12 +308,6 @@ update_sets (struct GNUNET_NETWORK_FDSet *rs, struct GNUNET_NETWORK_FDSet *ws, pos = pending; while (pos != NULL) { - if ((pos->prereq_id != GNUNET_SCHEDULER_NO_TASK) && - (GNUNET_YES == is_pending (pos->prereq_id))) - { - pos = pos->next; - continue; - } if (pos->timeout.abs_value != GNUNET_TIME_UNIT_FOREVER_ABS.abs_value) { to = GNUNET_TIME_absolute_get_difference (now, pos->timeout); @@ -459,15 +387,7 @@ is_ready (struct Task *task, struct GNUNET_TIME_Absolute now, reason |= GNUNET_SCHEDULER_REASON_WRITE_READY; if (reason == 0) return GNUNET_NO; /* not ready */ - if (task->prereq_id != GNUNET_SCHEDULER_NO_TASK) - { - if (GNUNET_YES == is_pending (task->prereq_id)) - { - task->reason = reason; - return GNUNET_NO; /* prereq waiting */ - } - reason |= GNUNET_SCHEDULER_REASON_PREREQ_DONE; - } + reason |= GNUNET_SCHEDULER_REASON_PREREQ_DONE; task->reason = reason; return GNUNET_YES; } @@ -1373,7 +1293,6 @@ add_without_sets (struct GNUNET_TIME_Relative delay, #if PROFILE_DELAYS t->start_time = GNUNET_TIME_absolute_get (); #endif - t->prereq_id = GNUNET_SCHEDULER_NO_TASK; t->timeout = GNUNET_TIME_relative_to_absolute (delay); t->priority = check_priority ((priority == GNUNET_SCHEDULER_PRIORITY_KEEP) ? current_priority : priority); t->lifeness = current_lifeness;