X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=audiod_command.c;h=dfb014aebc1c1d12659364189ac79813c952139c;hp=f9349a1d3068921e67012cab3a9680c601736a02;hb=a7a72ca4acf7f44abca866d410e2bc80590e7fab;hpb=8dab386f87d2998fd26126600ca7faf56d5a35d1 diff --git a/audiod_command.c b/audiod_command.c index f9349a1d..dfb014ae 100644 --- a/audiod_command.c +++ b/audiod_command.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2010 Andre Noll + * Copyright (C) 2005-2011 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -8,7 +8,6 @@ #include #include -#include #include #include "para.h" @@ -121,24 +120,22 @@ void stat_client_write_item(int item_num) struct para_buffer pb = {.flags = 0}; struct para_buffer pfpb = {.flags = PBF_SIZE_PREFIX}; const uint64_t one = 1; + char *msg = stat_item_values[item_num]; + struct para_buffer *b; list_for_each_entry_safe(sc, tmp, &client_list, node) { int fd = sc->fd, ret; if (!((one << item_num) & sc->item_mask)) continue; - if (write_ok(fd) > 0) { - struct para_buffer *b = - (sc->flags & SCF_PARSER_FRIENDLY)? &pfpb : &pb; - char *msg = stat_item_values[item_num]; - if (!b->buf) - WRITE_STATUS_ITEM(b, item_num, "%s\n", - msg? msg : ""); - ret = write(fd, b->buf, b->offset); - if (ret == b->offset) - continue; - } - /* write error or fd not ready for writing */ + b = (sc->flags & SCF_PARSER_FRIENDLY)? &pfpb : &pb; + if (!b->buf) + (void)WRITE_STATUS_ITEM(b, item_num, "%s\n", + msg? msg : ""); + ret = write(fd, b->buf, b->offset); + if (ret == b->offset) + continue; + /* write error or short write */ close(fd); num_clients--; PARA_INFO_LOG("deleting client on fd %d\n", fd); @@ -148,8 +145,6 @@ void stat_client_write_item(int item_num) } free(pb.buf); free(pfpb.buf); -// if (num_clients) -// PARA_DEBUG_LOG("%d client(s)\n", num_clients); } /** @@ -199,7 +194,7 @@ static int get_play_time_slot_num(void) FOR_EACH_SLOT(i) { struct slot_info *s = &slot[i]; struct timeval wstime; - if (!s->wns) + if (!s->wns || !s->wns[0].btrn) continue; btr_get_node_start(s->wns[0].btrn, &wstime); if (oldest_slot >= 0 && tv_diff(&wstime, &oldest_wstime, NULL) > 0) @@ -301,21 +296,6 @@ int com_tasks(int fd, __a_unused int argc, __a_unused char **argv) return ret; } -int com_kill(int fd, int argc, char **argv) -{ - int i, ret = 1; - if (argc < 2) - return -E_AUDIOD_SYNTAX; - for (i = 1; i < argc; i++) { - ret = kill_task(argv[i]); - if (ret < 0) - break; - } - if (ret > 0) - close(fd); - return ret; -} - int com_stat(int fd, int argc, char **argv) { int i, ret, parser_friendly = 0; @@ -323,6 +303,9 @@ int com_stat(int fd, int argc, char **argv) const uint64_t one = 1; struct para_buffer b = {.flags = 0}; + ret = mark_fd_nonblocking(fd); + if (ret < 0) + return ret; for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (arg[0] != '-') @@ -350,7 +333,7 @@ int com_stat(int fd, int argc, char **argv) char *item = stat_item_values[i]; if (!((one << i) & mask)) continue; - WRITE_STATUS_ITEM(&b, i, "%s\n", item? item : ""); + (void)WRITE_STATUS_ITEM(&b, i, "%s\n", item? item : ""); } ret = client_write(fd, b.buf); if (ret >= 0) @@ -424,6 +407,7 @@ static int check_perms(uid_t uid) * Handle arriving connections on the local socket. * * \param accept_fd The fd to accept connections on. + * \param rfds If \a accept_fd is not set in \a rfds, do nothing. * * This is called in each iteration of the select loop. If there is an incoming * connection on \a accept_fd, this function reads the command sent by the peer, @@ -496,7 +480,7 @@ void audiod_status_dump(void) free(new); } - new = uptime_str(); + new = get_server_uptime_str(now); old = stat_item_values[SI_AUDIOD_UPTIME]; if (!old || strcmp(old, new)) { free(old);