diff --git a/db/boinc_db.cpp b/db/boinc_db.cpp index 18635af7af9..4a75b5aa005 100644 --- a/db/boinc_db.cpp +++ b/db/boinc_db.cpp @@ -2032,8 +2032,9 @@ int DB_VALIDATOR_ITEM_SET::update_workunit(WORKUNIT& wu) { char query[MAX_QUERY_LEN]; sprintf(query, - "update workunit set need_validate=0, error_mask=%d, " - "assimilate_state=%d, transition_time=%d, " + "update workunit set need_validate=0, " + "error_mask=error_mask|%d, " + "transition_time=%d, " "target_nresults=%d, " "canonical_resultid=%lu, canonical_credit=%.15e " "where id=%lu", diff --git a/sched/validator.cpp b/sched/validator.cpp index 8de34aa557a..38a9b2860a6 100644 --- a/sched/validator.cpp +++ b/sched/validator.cpp @@ -685,7 +685,11 @@ int handle_wu( ); wu.canonical_resultid = canonicalid; wu.canonical_credit = credit; - wu.assimilate_state = ASSIMILATE_READY; + + // DON'T modify assimilate_state here, under bad conditions the + // assimilator may have already started to work on this WU. + // Instead, let the transitioner decide what to do with it. + transition_time = IMMEDIATE; // don't need to send any more results //