X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=vss.c;h=efd0c5ea8e43402fc85f801fc87f039674cf91a8;hp=46fb3196c4c2155be65b361e9f1fb31715693e19;hb=5c556c52f1196cea4536d36b683372de532943a9;hpb=77d2f77d29e7653bdf5659962782f80e8a643166 diff --git a/vss.c b/vss.c index 46fb3196..efd0c5ea 100644 --- a/vss.c +++ b/vss.c @@ -345,6 +345,7 @@ static int recv_afs_msg(int *fd, uint32_t *code, uint32_t *data) struct iovec iov; int ret = 0; + *fd = -1; iov.iov_base = buf; iov.iov_len = sizeof(buf); msg.msg_iov = &iov; @@ -355,6 +356,7 @@ static int recv_afs_msg(int *fd, uint32_t *code, uint32_t *data) ret = recvmsg(afs_socket, &msg, 0); if (ret < 0) return -ERRNO_TO_PARA_ERROR(errno); + afsss = AFS_SOCKET_READY; if (iov.iov_len != sizeof(buf)) return -E_SHORT_AFS_READ; *code = *(uint32_t*)buf; @@ -372,7 +374,7 @@ static int recv_afs_msg(int *fd, uint32_t *code, uint32_t *data) static void recv_afs_result(void) { - int ret, passed_fd = -1, shmid; + int ret, passed_fd, shmid; uint32_t afs_code = 0, afs_data = 0; struct stat statbuf; struct timeval now; @@ -380,12 +382,13 @@ static void recv_afs_result(void) ret = recv_afs_msg(&passed_fd, &afs_code, &afs_data); if (ret < 0) goto err; - PARA_DEBUG_LOG("got the fd: %d, code: %u, shmid: %u\n", - passed_fd, afs_code, afs_data); - ret = -E_BAD_AFS_CODE; + PARA_DEBUG_LOG("fd: %d, code: %u, shmid: %u\n", passed_fd, afs_code, + afs_data); + ret = -E_NOFD; if (afs_code != NEXT_AUDIO_FILE) goto err; - afsss = AFS_SOCKET_READY; + if (passed_fd < 0) + goto err; shmid = afs_data; ret = load_afd(shmid, &mmd->afd); if (ret < 0) @@ -415,6 +418,7 @@ err: if (passed_fd >= 0) close(passed_fd); PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); + mmd->new_vss_status_flags = VSS_NEXT; } void vss_post_select(fd_set *rfds, fd_set *wfds)