+ } else if (!should_sleep) {
+ update_predicate_score(selected_branch, SLEEP_FAIL_TYPE2);
+ should_reselect_predicate = true;
+ } else {
+ for (uint i = 0; i < dist_info_vec.size(); i++) {
+ struct node_dist_info info = dist_info_vec[i];
+ history->add_waiting_thread(tid, info.tid, info.target, info.dist);
+ }
+
+ // reset thread pending action and revert sequence numbers
+ read_thread->set_pending(read);
+ read->reset_seq_number();
+ execution->restore_last_seq_num();
+
+ conditional_sleep(read_thread);
+ // Returning -1 stops the while loop of ModelExecution::process_read
+ return -1;