]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - vss.c
Print a log message if the sender command fails.
[paraslash.git] / vss.c
diff --git a/vss.c b/vss.c
index bfb0f0a175dc5da0e79bad5ab0497d6f1faff2f2..0eb235c72e711391beee1f417ca997e8c5d65870 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -781,16 +781,20 @@ static int recv_afs_msg(int afs_socket, int *fd, uint32_t *code, uint32_t *data)
        return 1;
 }
 
-static void recv_afs_result(struct vss_task *vsst)
+static void recv_afs_result(struct vss_task *vsst, fd_set *rfds)
 {
        int ret, passed_fd, shmid;
        uint32_t afs_code = 0, afs_data = 0;
        struct stat statbuf;
 
-       vsst->afsss = AFS_SOCKET_READY;
+       if (!FD_ISSET(vsst->afs_socket, rfds))
+               return;
        ret = recv_afs_msg(vsst->afs_socket, &passed_fd, &afs_code, &afs_data);
+       if (ret == -ERRNO_TO_PARA_ERROR(EAGAIN))
+               return;
        if (ret < 0)
                goto err;
+       vsst->afsss = AFS_SOCKET_READY;
        PARA_DEBUG_LOG("fd: %d, code: %u, shmid: %u\n", passed_fd, afs_code,
                afs_data);
        ret = -E_NOFD;
@@ -916,14 +920,17 @@ static void vss_post_select(struct sched *s, struct task *t)
                int num = mmd->sender_cmd_data.cmd_num,
                        sender_num = mmd->sender_cmd_data.sender_num;
 
-               if (senders[sender_num].client_cmds[num])
-                       senders[sender_num].client_cmds[num](&mmd->sender_cmd_data);
+               if (senders[sender_num].client_cmds[num]) {
+                       ret = senders[sender_num].client_cmds[num]
+                               (&mmd->sender_cmd_data);
+                       if (ret < 0)
+                               PARA_ERROR_LOG("%s\n", para_strerror(-ret));
+               }
                mmd->sender_cmd_data.cmd_num = -1;
        }
-       if (vsst->afsss != AFS_SOCKET_CHECK_FOR_WRITE) {
-               if (FD_ISSET(vsst->afs_socket, &s->rfds))
-                       recv_afs_result(vsst);
-       } else if (FD_ISSET(vsst->afs_socket, &s->wfds)) {
+       if (vsst->afsss != AFS_SOCKET_CHECK_FOR_WRITE)
+               recv_afs_result(vsst, &s->rfds);
+       else if (FD_ISSET(vsst->afs_socket, &s->wfds)) {
                PARA_NOTICE_LOG("requesting new fd from afs\n");
                ret = send_buffer(vsst->afs_socket, "new");
                if (ret < 0)