[Spice-devel] [PATCH spice-streaming-agent v3] Remove reading start/stop commands from stdin
Frediano Ziglio
fziglio at redhat.com
Wed Feb 14 16:48:01 UTC 2018
>
> It was mainly a debugging feature for the early development stages. It
> was agreed its usefulness is at the moment outweighed by the complexity
> it brings to the code.
>
> Signed-off-by: Lukáš Hrázký <lhrazky at redhat.com>
Acked-by: Frediano Ziglio <fziglio at redhat.com>
Frediano
> ---
> Changes since v2:
> - fix grammar in the description
> - use ternary if for passing the LOG_PERROR flag to openlog()
>
> Changes since v1:
> - Log also to stderr if it's a tty
>
> src/spice-streaming-agent.cpp | 71
> +++++++++----------------------------------
> 1 file changed, 14 insertions(+), 57 deletions(-)
>
> diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
> index f4fee2d..ffb0c5d 100644
> --- a/src/spice-streaming-agent.cpp
> +++ b/src/spice-streaming-agent.cpp
> @@ -55,54 +55,23 @@ static int streaming_requested;
> static std::set<SpiceVideoCodecType> client_codecs;
> static bool quit;
> static int streamfd = -1;
> -static bool stdin_ok;
> static int log_binary = 0;
> static std::mutex stream_mtx;
>
> -static int have_something_to_read(int *pfd, int timeout)
> +static int have_something_to_read(int timeout)
> {
> - int nfds;
> - struct pollfd pollfds[2] = {
> - {streamfd, POLLIN, 0},
> - {0, POLLIN, 0}
> - };
> - *pfd = -1;
> - nfds = (stdin_ok ? 2 : 1);
> - if (poll(pollfds, nfds, timeout) < 0) {
> + struct pollfd pollfd = {streamfd, POLLIN, 0};
> +
> + if (poll(&pollfd, 1, timeout) < 0) {
> syslog(LOG_ERR, "poll FAILED\n");
> return -1;
> }
> - if (pollfds[0].revents == POLLIN) {
> - *pfd = streamfd;
> - }
> - if (pollfds[1].revents == POLLIN) {
> - *pfd = 0;
> - }
> - return *pfd != -1;
> -}
> -
> -static int read_command_from_stdin(void)
> -{
> - char buffer[64], *p, *save = NULL;
>
> - p = fgets(buffer, sizeof(buffer), stdin);
> - if (p == NULL) {
> - syslog(LOG_ERR, "Failed to read from stdin\n");
> - return -1;
> - }
> - const char *cmd = strtok_r(buffer, " \t\n\r", &save);
> - if (!cmd)
> + if (pollfd.revents == POLLIN) {
> return 1;
> - if (strcmp(cmd, "quit") == 0) {
> - quit = true;
> - } else if (strcmp(cmd, "start") == 0) {
> - streaming_requested = 1;
> - } else if (strcmp(cmd, "stop") == 0) {
> - streaming_requested = 0;
> - } else {
> - syslog(LOG_WARNING, "unknown command %s\n", cmd);
> }
> - return 1;
> +
> + return 0;
> }
>
> static int read_command_from_device(void)
> @@ -152,24 +121,19 @@ static int read_command_from_device(void)
>
> static int read_command(bool blocking)
> {
> - int fd, n=1;
> int timeout = blocking?-1:0;
> while (!quit) {
> - if (!have_something_to_read(&fd, timeout)) {
> + if (!have_something_to_read(timeout)) {
> if (!blocking) {
> return 0;
> }
> sleep(1);
> continue;
> }
> - if (fd) {
> - n = read_command_from_device();
> - } else {
> - n = read_command_from_stdin();
> - }
> - break;
> + return read_command_from_device();
> }
> - return n;
> +
> + return 1;
> }
>
> static size_t
> @@ -276,7 +240,6 @@ static void usage(const char *progname)
> printf("usage: %s <options>\n", progname);
> printf("options are:\n");
> printf("\t-p portname -- virtio-serial port to use\n");
> - printf("\t-i accept commands from stdin\n");
> printf("\t-l file -- log frames to file\n");
> printf("\t--log-binary -- log binary frames (following -l)\n");
> printf("\t-d -- enable debug logs\n");
> @@ -446,22 +409,16 @@ int main(int argc, char* argv[])
> { 0, 0, 0, 0}
> };
>
> - if (isatty(fileno(stderr)) && isatty(fileno(stdin))) {
> - stdin_ok = true;
> - }
> + openlog("spice-streaming-agent",
> + isatty(fileno(stderr)) ? (LOG_PERROR|LOG_PID) : LOG_PID,
> LOG_USER);
>
> - openlog("spice-streaming-agent", stdin_ok? (LOG_PERROR|LOG_PID) :
> LOG_PID, LOG_USER);
> setlogmask(logmask);
>
> - while ((opt = getopt_long(argc, argv, "hip:c:l:d", long_options, NULL))
> != -1) {
> + while ((opt = getopt_long(argc, argv, "hp:c:l:d", long_options, NULL))
> != -1) {
> switch (opt) {
> case 0:
> /* Handle long options if needed */
> break;
> - case 'i':
> - stdin_ok = true;
> - openlog("spice-streaming-agent", LOG_PERROR|LOG_PID, LOG_USER);
> - break;
> case 'p':
> streamport = optarg;
> break;
More information about the Spice-devel
mailing list