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