#include "schedule.h"
#include "common.h"
#include "model.h"
-#include "nodestack.h"
#include "execution.h"
+#include "fuzzer.h"
/**
* Format an "enabled_type_t" for printing
bool Scheduler::all_threads_sleeping() const
{
bool sleeping = false;
- for (int i = 0; i < enabled_len; i++)
+ for (int i = 0;i < enabled_len;i++)
if (enabled[i] == THREAD_ENABLED)
return false;
else if (enabled[i] == THREAD_SLEEP_SET)
/**
* @brief Select a Thread to run via round-robin
*
- * @param n The current Node, holding priority information for the next thread
- * selection
*
* @return The next Thread to run
*/
-Thread * Scheduler::select_next_thread(Node *n)
+Thread * Scheduler::select_next_thread()
{
- int avail_threads = enabled_len; // number of available threads
- int thread_list[enabled_len]; // keep a list of threads to select from
- for (int i = 0; i< enabled_len; i++){
- thread_list[i] = i;
+ int avail_threads = 0;
+ int thread_list[enabled_len];
+ for (int i = 0;i< enabled_len;i++) {
+ if (enabled[i] == THREAD_ENABLED)
+ thread_list[avail_threads++] = i;
}
- while (avail_threads > 0) {
- int random_index = random() % avail_threads;
- curr_thread_index = thread_list[random_index]; // randomly select a thread from available threads
-
- // curr_thread_index = (curr_thread_index + i + 1) % enabled_len;
- thread_id_t curr_tid = int_to_id(curr_thread_index);
-
- if (enabled[curr_thread_index] == THREAD_ENABLED) {
- return model->get_thread(curr_tid);
- } else { // remove this threads from available threads
- thread_list[random_index] = thread_list[avail_threads - 1];
- avail_threads--;
- }
- }
-
- /* No thread was enabled */
- return NULL;
+ if (avail_threads == 0)
+ return NULL;// No threads availablex
+
+ Thread * thread = execution->getFuzzer()->selectThread(thread_list, avail_threads);
+ curr_thread_index = id_to_int(thread->get_id());
+ return thread;
}
void Scheduler::set_scheduler_thread(thread_id_t tid) {
int curr_id = current ? id_to_int(current->get_id()) : -1;
model_print("Scheduler: ");
- for (int i = 0; i < enabled_len; i++) {
+ for (int i = 0;i < enabled_len;i++) {
char str[20];
enabled_type_to_string(enabled[i], str);
model_print("[%i: %s%s]", i, i == curr_id ? "current, " : "", str);