+/* Update predicate counts and scores (asynchronous) when the read value is not available
+ *
+ * @param type
+ * type 1: find_threads return false
+ * type 2: find_threads return true, but the fuzzer decides that that thread shall not sleep based on sleep score
+ * type 3: threads are put to sleep but woken up before the waited value appears
+ * type 4: threads are put to sleep and the waited vaule appears (success)
+ */
+void NewFuzzer::update_predicate_score(Predicate * predicate, int type)
+{
+ switch (type) {
+ case 1:
+ predicate->incr_fail_count();
+
+ /* Do not choose this predicate when reselecting a new branch */
+ failed_predicates.put(predicate, true);
+ case 2:
+ predicate->incr_fail_count();
+ predicate->decr_sleep_score(1);
+ case 3:
+ predicate->incr_fail_count();
+ predicate->incr_sleep_score(10);
+ case 4:
+ predicate->decr_sleep_score(10);
+ }
+}
+