X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.c;h=8a60166fe7e42d5f5762cb46547a9413df6bd342;hp=353626ee7cd37602e1faaeb37004ba278eb9e3f1;hb=965eae5ba6664349ff74977439f3214142a3bc9a;hpb=c47aa3e188e0e51b4dfdf957a140177bfc03a8da diff --git a/afs.c b/afs.c index 353626ee..8a60166f 100644 --- a/afs.c +++ b/afs.c @@ -487,17 +487,26 @@ int open_next_audio_file(void) int ret, shmid; char buf[8]; long score; - +again: PARA_NOTICE_LOG("getting next audio file\n"); ret = score_get_best(&aft_row, &score); - if (ret < 0) - return ret; + if (ret < 0) { + PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); + goto no_admissible_files; + } ret = open_and_update_audio_file(aft_row, score, &afd); - if (ret < 0) - return ret; + if (ret < 0) { + PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); + ret = score_delete(aft_row); + if (ret < 0) { + PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); + goto no_admissible_files; + } + goto again; + } shmid = ret; if (!write_ok(server_socket)) { - PARA_EMERG_LOG("afs_socket not writable\n"); + ret = -E_AFS_SOCKET; goto destroy; } *(uint32_t *)buf = NEXT_AUDIO_FILE; @@ -506,10 +515,13 @@ int open_next_audio_file(void) close(afd.fd); if (ret >= 0) return ret; - PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); destroy: shm_destroy(shmid); return ret; +no_admissible_files: + *(uint32_t *)buf = NO_ADMISSIBLE_FILES; + *(uint32_t *)(buf + 4) = (uint32_t)0; + return send_bin_buffer(server_socket, buf, 8); } /* Never fails if arg == NULL */ @@ -846,8 +858,10 @@ static void execute_server_command(void) PARA_DEBUG_LOG("received: %s\n", buf); if (!strcmp(buf, "new")) { ret = open_next_audio_file(); - if (ret < 0) - PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret)); + if (ret < 0) { + PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret)); + unregister_tasks(); + } return; } PARA_ERROR_LOG("unknown command\n");