chiark / gitweb /
core: fix transaction destructiveness check once more
authorMichal Schmidt <mschmidt@redhat.com>
Thu, 27 Nov 2014 14:23:58 +0000 (15:23 +0100)
committerMichal Schmidt <mschmidt@redhat.com>
Thu, 27 Nov 2014 15:14:58 +0000 (16:14 +0100)
The previous fix e0312f4db "core: fix check for transaction
destructiveness" broke test-engine (noticed by Zbyszek).
Apparently I had a wrong idea of the intended semantics of --fail.

The manpage says the operation should fail if it "conflicts with a
pending job (more specifically: causes an already pending start job to
be reversed into a stop job or vice versa)".

So let's check job_type_is_conflicting, instead of !is_superset.

This makes both test-engine and TEST-03-JOBS pass again.

src/core/transaction.c

index b992eddf994fbfc45a8188915c564f4070d2fd94..6ad11b2fdb697d91a7d1810e27bfdd56c49386bf 100644 (file)
@@ -511,7 +511,7 @@ static int transaction_is_destructive(Transaction *tr, JobMode mode, sd_bus_erro
                 assert(!j->transaction_next);
 
                 if (j->unit->job && (mode == JOB_FAIL || j->unit->job->irreversible) &&
-                    !job_type_is_superset(j->unit->job->type, j->type))
+                    job_type_is_conflicting(j->unit->job->type, j->type))
                         return sd_bus_error_setf(e, BUS_ERROR_TRANSACTION_IS_DESTRUCTIVE,
                                                  "Transaction is destructive.");
         }