]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Added handling of errors with unregistered blocks
authorMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 3 Nov 2008 18:02:12 +0000 (19:02 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 3 Nov 2008 18:02:12 +0000 (19:02 +0100)
fres/contract/fres_container.c
fres/contract/fres_error.c
fres/contract/fres_error.h
resources/dummy/frm_dummy.c

index 1f7e059564e2b147a57f77d69c913651148551a7..3f522c802e7ccea25204bf063d61f8dd5e09ec97 100644 (file)
@@ -177,7 +177,7 @@ fres_container_duplicate(const struct fres_container *source)
                const struct fres_block *sb = &source->blocks[type];
                struct fres_block *db = &dest->blocks[type];
                db->state = FRES_BLOCK_EMPTY;
-               switch (source->blocks[type].state) {
+               switch (sb->state) {
                        case FRES_BLOCK_EMPTY:
                                /* nothing to do */
                                break;
@@ -228,6 +228,10 @@ fres_container_add_block(struct fres_container *container,
                errno = EINVAL;
                return -1;
        }
+       if  (!block_registry[type]) {
+               errno = FRES_ERR_BLOCK_NOT_REGISTERED;
+               return -1;
+       }
 
        container->blocks[type].u.data = block;
        container->blocks[type].state = FRES_BLOCK_DATA;
index d3d6f81a93358a9e26d86768f2e1dbfb2c0d8a2c..df55c9636169be886d0a2d6f07886c0c7757860d 100644 (file)
@@ -94,6 +94,7 @@ int fres_strerror (int error, char *message, size_t size)
        switch (e) {
                MSG(FCB_NOT_RUNNING);
                MSG(FORB_EXCEPTION);
+               MSG(BLOCK_NOT_REGISTERED);
        }
 
        if (s == NULL) return FRSH_ERR_BAD_ARGUMENT;
index 35db8e2ead4b6f370a6465117d2f6a93bad70f31..dc361efa1799417d126f696f5094713f6945f52c 100644 (file)
@@ -6,6 +6,7 @@
 enum fres_error {
        FRES_ERR_FCB_NOT_RUNNING = FRES_ERR_BASE_VALUE,
        FRES_ERR_FORB_EXCEPTION,
+       FRES_ERR_BLOCK_NOT_REGISTERED,
 };
 
 int fres_strerror (int error, char *message, size_t size);
index 4c19ba729d616a44ab14871c8a863da5f5bae5ce..10772180ed0328cb13007696dae5466a8ae8def6 100644 (file)
@@ -17,6 +17,7 @@ int admission_test(struct fres_sa_scenario *scenario, void *priv, bool *schedula
 {
        struct dummy_data *data = priv;
        struct fres_sa_contract *c;
+       int ret;
 
        printf("Admission test:\n");
        data->some_data++;
@@ -33,9 +34,17 @@ int admission_test(struct fres_sa_scenario *scenario, void *priv, bool *schedula
                        dummy_sched = malloc(sizeof(*dummy_sched));
                        if (!dummy_sched) return -1;
                        dummy_sched->priority = 100 - fosa_rel_time_to_msec(basic->budget);
-                       fres_contract_add_block(c->contract, FRES_BLOCK_DUMMY_SCHED, dummy_sched);
+                       ret = fres_contract_add_block(c->contract, FRES_BLOCK_DUMMY_SCHED, dummy_sched);
+                       if (ret) {
+                               fprintf(stderr, "Cannpt add dummy_sched block\n");
+                               return -1;
+                       }
                } else {
                        dummy_sched = fres_contract_get_block(c->contract, FRES_BLOCK_DUMMY_SCHED);
+                       if (!dummy_sched) {
+                               fprintf(stderr, "Dummy_sched is not present\n");
+                               return -1;
+                       }
                }
 
                printf("  %s contract: id=%s, period=%ld ms, budget=%ld ms, priority=%d\n",
@@ -71,7 +80,7 @@ int main(int argc, char *argv[])
 
        /* Register fres_block_dummy_sched to contract handling
         * functions */
-       fres_block_register_dummy();
+       //fres_block_register_dummy();
 
        ret = frm_register_and_run(orb, &frm);