- while(true) {
- curr_thread_index = (curr_thread_index+1) % enabled_len;
- thread_id_t curr_tid=int_to_id(curr_thread_index);
- if (enabled[curr_thread_index]==THREAD_ENABLED&&
- (!have_enabled_thread_with_priority||n->has_priority(curr_tid))) {
- t = model->get_thread(curr_tid);
- break;
- }
- if (curr_thread_index == old_curr_thread) {
- print();
- return NULL;
- }
+ if (avail_threads == 0 && !execution->getFuzzer()->has_paused_threads()) {
+ if (sleep_threads != 0) {
+ // No threads available, but some threads sleeping. Wake up one of them
+ thread = execution->getFuzzer()->selectThread(sleep_list, sleep_threads);
+ remove_sleep(thread);
+ thread->set_wakeup_state(true);
+ } else {
+ return NULL; // No threads available and no threads sleeping.