]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - gui.c
Use non-blocking API for signal handling.
[paraslash.git] / gui.c
diff --git a/gui.c b/gui.c
index 8272fee79747847522ebf7282d071b52fb66f845..f2098d45162bd854de5c256feb35d2aab9fe730b 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1998-2009 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1998-2010 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -730,6 +730,8 @@ static int read_audiod_pipe(int fd)
        ret = for_each_stat_item(buf, loaded, update_item);
        if (ret < 0)
                return ret;
+       if (ret > 0 && ret < loaded)
+               memmove(buf, buf + loaded - ret, ret);
        loaded = ret;
        return 1;
 }
@@ -953,11 +955,9 @@ repeat:
        if (ret <= 0)
                goto check_return; /* skip fd checks */
        /* signals */
-       if (FD_ISSET(signal_pipe, &rfds)) {
-               int sig_nr = para_next_signal();
-               if (sig_nr > 0)
-                       handle_signal(sig_nr);
-       }
+       ret = para_next_signal(&rfds);
+       if (ret > 0)
+               handle_signal(ret);
        /* read command pipe if ready */
        if (command_pipe >= 0 && mode == COMMAND_MODE &&
                        FD_ISSET(command_pipe, &rfds)) {
@@ -1371,6 +1371,7 @@ static void handle_command(int c)
                                command_list[num].handler();
                }
                free(tmp);
+               return;
        }
        /* not found, check internal key bindings */
        for (i = 0; command_list[i].handler; i++) {