More changes!
=== modified file 'uspace/lib/graph/graph.c'
--- uspace/lib/graph/graph.c    2013-09-10 16:32:35 +0000
+++ uspace/lib/graph/graph.c    2014-07-08 02:17:09 +0000
@@ -287,6 +287,15 @@
 
 static void vs_enumerate_modes(visualizer_t *vs, ipc_callid_t iid, ipc_call_t 
*icall)
 {
+       ipc_callid_t callid;
+       size_t len;
+
+       if (!async_data_read_receive(&callid, &len)) {
+               async_answer_0(callid, EREFUSED);
+               async_answer_0(iid, EREFUSED);
+               return;
+       }
+
        fibril_mutex_lock(&vs->mode_mtx);
        link_t *link = list_nth(&vs->modes, IPC_GET_ARG1(*icall));
 
@@ -296,14 +305,7 @@
                vslmode_t mode = mode_elem->mode;
                fibril_mutex_unlock(&vs->mode_mtx);
 
-               ipc_callid_t callid;
-               size_t len;
-
-        if (!async_data_read_receive(&callid, &len)) {
-                       async_answer_0(iid, EINVAL);
-                       return;
-        }
-        int rc = async_data_read_finalize(callid, &mode, len);
+               int rc = async_data_read_finalize(callid, &mode, len);
                if (rc != EOK) {
                        async_answer_0(iid, ENOMEM);
                        return;
@@ -311,12 +313,23 @@
 
                async_answer_0(iid, EOK);
        } else {
+               fibril_mutex_unlock(&vs->mode_mtx);
+               async_answer_0(callid, ENOENT);
                async_answer_0(iid, ENOENT);
        }
 }
 
 static void vs_get_default_mode(visualizer_t *vs, ipc_callid_t iid, ipc_call_t 
*icall)
 {
+       ipc_callid_t callid;
+       size_t len;
+
+       if (!async_data_read_receive(&callid, &len)) {
+               async_answer_0(callid, EREFUSED);
+               async_answer_0(iid, EREFUSED);
+               return;
+       }
+
        fibril_mutex_lock(&vs->mode_mtx);
        vslmode_list_element_t *mode_elem = NULL;
        list_foreach(vs->modes, link, vslmode_list_element_t, cur) {
@@ -331,13 +344,6 @@
                mode = mode_elem->mode;
                fibril_mutex_unlock(&vs->mode_mtx);
 
-               ipc_callid_t callid;
-               size_t len;
-
-               if (!async_data_read_receive(&callid, &len)) {
-                       async_answer_0(iid, EINVAL);
-                       return;
-               }
                int rc = async_data_read_finalize(callid, &mode, len);
                if (rc != EOK) {
                        async_answer_0(iid, ENOMEM);
@@ -346,20 +352,23 @@
                async_answer_0(iid, EOK);
        } else {
                fibril_mutex_unlock(&vs->mode_mtx);
+               async_answer_0(callid, ENOENT);
                async_answer_0(iid, ENOENT);
        }
 }
 
 static void vs_get_current_mode(visualizer_t *vs, ipc_callid_t iid, ipc_call_t 
*icall)
 {
+       ipc_callid_t callid;
+       size_t len;
+
+       if (!async_data_read_receive(&callid, &len)) {
+               async_answer_0(callid, EREFUSED);
+               async_answer_0(iid, EREFUSED);
+               return;
+       }
+
        if (vs->mode_set) {
-               ipc_callid_t callid;
-               size_t len;
-
-               if (!async_data_read_receive(&callid, &len)) {
-                       async_answer_0(iid, EINVAL);
-                       return;
-               }
                int rc = async_data_read_finalize(callid, &vs->cur_mode, len);
                if (rc != EOK) {
                        async_answer_0(iid, ENOMEM);
@@ -368,14 +377,23 @@
 
                async_answer_0(iid, EOK);
        } else {
+               async_answer_0(callid, ENOENT);
                async_answer_0(iid, ENOENT);
        }
 }
 
 static void vs_get_mode(visualizer_t *vs, ipc_callid_t iid, ipc_call_t *icall)
 {
+       ipc_callid_t callid;
+       size_t len;
        sysarg_t mode_idx = IPC_GET_ARG1(*icall);
 
+       if (!async_data_read_receive(&callid, &len)) {
+               async_answer_0(callid, EREFUSED);
+               async_answer_0(iid, EREFUSED);
+               return;
+       }
+
        fibril_mutex_lock(&vs->mode_mtx);
        vslmode_list_element_t *mode_elem = NULL;
        list_foreach(vs->modes, link, vslmode_list_element_t, cur) {
@@ -390,13 +408,6 @@
                mode = mode_elem->mode;
                fibril_mutex_unlock(&vs->mode_mtx);
 
-               ipc_callid_t callid;
-               size_t len;
-
-               if (!async_data_read_receive(&callid, &len)) {
-                       async_answer_0(iid, EINVAL);
-                       return;
-               }
                int rc = async_data_read_finalize(callid, &mode, len);
                if (rc != EOK) {
                        async_answer_0(iid, ENOMEM);
@@ -405,6 +416,7 @@
                async_answer_0(iid, EOK);
        } else {
                fibril_mutex_unlock(&vs->mode_mtx);
+               async_answer_0(callid, ENOENT);
                async_answer_0(iid, ENOENT);
        }
 }
@@ -412,6 +424,16 @@
 static void vs_set_mode(visualizer_t *vs, ipc_callid_t iid, ipc_call_t *icall)
 {
        int rc = EOK;
+       ipc_callid_t callid;
+       size_t size;
+       unsigned int flags;
+
+       /* Retrieve the shared cell storage for the new mode. */
+       if (!async_share_out_receive(&callid, &size, &flags)) {
+               async_answer_0(callid, EREFUSED);
+               async_answer_0(iid, EREFUSED);
+               return;
+       }
 
        /* Retrieve mode index and version. */
        sysarg_t mode_idx = IPC_GET_ARG1(*icall);
@@ -434,25 +456,18 @@
                fibril_mutex_unlock(&vs->mode_mtx);
        } else {
                fibril_mutex_unlock(&vs->mode_mtx);
+               async_answer_0(callid, ENOENT);
                async_answer_0(iid, ENOENT);
                return;
        }
 
        /* Check whether the mode is still up-to-date. */
        if (new_mode.version != mode_version) {
-               async_answer_0(iid, EINVAL);
-               return;
-       }
-
-       ipc_callid_t callid;
-       size_t size;
-       unsigned int flags;
-
-       /* Retrieve the shared cell storage for the new mode. */
-       if (!async_share_out_receive(&callid, &size, &flags)) {
-               async_answer_0(iid, EINVAL);
-               return;
-       }
+               async_answer_0(callid, EINVAL);
+               async_answer_0(iid, EINVAL);
+               return;
+       }
+
        void *new_cell_storage;
        rc = async_share_out_finalize(callid, &new_cell_storage);
        if ((rc != EOK) || (new_cell_storage == AS_MAP_FAILED)) {

_______________________________________________
HelenOS-devel mailing list
[email protected]
http://lists.modry.cz/listinfo/helenos-devel

Reply via email to