+int
+commit_resource(struct resource *resource,
+ fres_contract_ptr_seq **schedulable_contracts)
+{
+ int ret;
+ fres_contract_id_seq commit_ids;
+ int i;
+ struct fcb_contract *fc;
+ CORBA_Environment ev;
+
+ if (!forb_sequence_alloc_buf(&commit_ids, resource->rl.length)) {
+ ret = errno;
+ goto err;
+ }
+
+ commit_ids._length = resource->rl.length;
+ i=0;
+ ul_list_for_each(reservation_list, &resource->rl, fc) {
+ forb_sequence_elem(&commit_ids, i) = fc->id;
+ i++;
+ }
+
+ fres_resource_manager_commit_contracts(resource->mng, &commit_ids,
+ schedulable_contracts, &ev);
+ if (forb_exception_occurred(&ev)) {
+ ret = fres_forbex2err(&ev);
+ goto err_free;
+ }
+ return 0;
+err_free:
+ forb_sequence_free_buf(&commit_ids, forb_no_destructor);
+err:
+ return ret;
+}
+
+int cancel_reservations(struct resource *resource)
+{
+ int ret;
+ fres_contract_id_seq commit_ids;
+ int i;
+ struct fcb_contract *fc;
+ CORBA_Environment ev;
+
+ if (!forb_sequence_alloc_buf(&commit_ids, resource->rl.length)) {
+ ret = errno;
+ goto err;
+ }
+
+ commit_ids._length = resource->rl.length;
+ i=0;
+ ul_list_for_each(reservation_list, &resource->rl, fc) {
+ forb_sequence_elem(&commit_ids, i) = fc->id;
+ i++;
+ }
+
+ fres_resource_manager_cancel_reservations(resource->mng, &commit_ids, &ev);
+ if (forb_exception_occurred(&ev)) {
+ ret = fres_forbex2err(&ev);
+ goto err_free;
+ }
+ return 0;
+err_free:
+ forb_sequence_free_buf(&commit_ids, forb_no_destructor);
+err:
+ return ret;
+}
+
+