From 432bcd17d464e2d90d324feaa8cca415391c5fa1 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Fri, 25 Jun 2010 23:29:23 +0200 Subject: [PATCH] fcb: Reject direct contract manipulation in transactions --- fres/cbroker/fcb.c | 14 ++++++++++++++ frsh_api/tests/trans_nego.c | 6 +++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/fres/cbroker/fcb.c b/fres/cbroker/fcb.c index bbc86900..9d5564a6 100644 --- a/fres/cbroker/fcb.c +++ b/fres/cbroker/fcb.c @@ -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) diff --git a/frsh_api/tests/trans_nego.c b/frsh_api/tests/trans_nego.c index 789cec37..f1764ced 100644 --- a/frsh_api/tests/trans_nego.c +++ b/frsh_api/tests/trans_nego.c @@ -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(); } -- 2.39.2