X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=afs.c;h=8a60166fe7e42d5f5762cb46547a9413df6bd342;hp=20f2455e30a3d1fe940d84d9d5616fd97e5ee30d;hb=21220e876ed8491c52bb00c470ee88b4a3cfe372;hpb=a5b65db9da1cd81c25494429ea8adb5d76e5b32a diff --git a/afs.c b/afs.c index 20f2455e..8a60166f 100644 --- a/afs.c +++ b/afs.c @@ -486,17 +486,27 @@ int open_next_audio_file(void) struct audio_file_data afd; int ret, shmid; char buf[8]; - + long score; +again: PARA_NOTICE_LOG("getting next audio file\n"); - ret = score_get_best(&aft_row, &afd.score); - if (ret < 0) - return ret; - ret = open_and_update_audio_file(aft_row, &afd); - if (ret < 0) - return ret; + ret = score_get_best(&aft_row, &score); + 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) { + 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; @@ -505,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 */ @@ -845,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");