]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
fcb: Reject direct contract manipulation in transactions
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 25 Jun 2010 21:29:23 +0000 (23:29 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 25 Jun 2010 21:29:23 +0000 (23:29 +0200)
fres/cbroker/fcb.c
frsh_api/tests/trans_nego.c

index bbc8690084eee2c2b26e9283b1b4f93a4adccd96..9d5564a683df719a1640a7f71d73675f9c606a3d 100644 (file)
@@ -892,6 +892,16 @@ fcb_remember_schedulable_contracts(struct fcb *fcb,
        return 0;
 }
 
+static int
+reject_transactions(struct fcb_contract *fcb_contracts[], int num)
+{
+       int i;
+       for (i = 0; i < num; i++) {
+               if (fcb_contracts[i]->transaction)
+                       return FRES_ERR_VRES_PART_OF_TRANSACTION;
+       }
+       return 0;
+}
 
 CORBA_long
 negotiate_contracts(fres_contract_broker obj,
@@ -930,6 +940,10 @@ negotiate_contracts(fres_contract_broker obj,
                                    contracts->_buffer, num);
        if (ret)
                goto err_free_fcb_contracts;
+
+       ret = reject_transactions(fcb_contracts, num);
+       if (ret)
+               goto err_free_fcb_contracts;
        ret = check_and_setup_resource(fcb, fcb_contracts, &resource,
                                       &app, num);
        if (ret)
index 789cec376790b311ec039673f8fab788b41fb998..f1764cedb50f863e1bc0919962202de43a29448f 100644 (file)
@@ -45,8 +45,8 @@ WVTEST_MAIN("transaction negotiation")
        WVFRSH(frsh_transaction_alloc_vres(&t, TEST_CONTRACT_1, &vres1));
        WVPASS(frsh_transaction_alloc_vres(&t, TEST_CONTRACT_2+1, &vres1) == FRSH_ERR_TOO_LARGE);
        /* TEST_CONTRACT_2 is allocated in trans_nego2.c */
-#if 0
-       WVPASS(frsh_contract_cancel(vres2) == FRES_ERR_VRES_PART_OF_TRANSACTION);
-#endif 
+
+       WVPASS(frsh_contract_cancel(vres1) == FRES_ERR_VRES_PART_OF_TRANSACTION);
+
        frsh_destroy();
 }