diff --git a/session-manager/src/nsmd.C b/session-manager/src/nsmd.C index d60ae9c..4dbfff7 100644 --- a/session-manager/src/nsmd.C +++ b/session-manager/src/nsmd.C @@ -97,6 +97,8 @@ enum { static int pending_operation = COMMAND_NONE; +static void wait ( long ); + #define GUIMSG( fmt, args... ) \ { \ @@ -352,7 +354,6 @@ handle_client_process_death ( int pid ) } } - void handle_sigchld ( ) { for ( ;; ) @@ -382,7 +383,6 @@ path_is_valid ( const char *path ) return r; } - int mkpath ( const char *path, bool create_final_directory ) { @@ -545,9 +545,9 @@ wait_for_announce ( void ) { n -= 100; - osc_server->wait(100); + wait(100); - active = number_of_active_clients(); + active = number_of_active_clients(); if ( client.size() == active ) break; @@ -568,7 +568,7 @@ wait_for_replies ( void ) { n -= 100; - osc_server->wait(100); + wait(100); if ( ! replies_still_pending() ) break; @@ -2164,16 +2164,30 @@ OSC_HANDLER( null ) +static void +wait ( long timeout ) +{ + struct signalfd_siginfo fdsi; + + ssize_t s = read(signal_fd, &fdsi, sizeof(struct signalfd_siginfo)); + + if (s == sizeof(struct signalfd_siginfo)) + { + if (fdsi.ssi_signo == SIGCHLD) + handle_sigchld(); + } + + osc_server->wait( timeout ); + + purge_dead_clients(); +} int main(int argc, char *argv[]) { sigset_t mask; - sigemptyset( &mask ); sigaddset( &mask, SIGCHLD ); - sigprocmask(SIG_BLOCK, &mask, NULL ); - signal_fd = signalfd( -1, &mask, SFD_NONBLOCK ); /* generate random seed for client ids */ @@ -2318,23 +2332,10 @@ int main(int argc, char *argv[]) } } - struct signalfd_siginfo fdsi; - - /* listen for sigchld signals and process OSC messages forever */ for ( ;; ) { - ssize_t s = read(signal_fd, &fdsi, sizeof(struct signalfd_siginfo)); - - if (s == sizeof(struct signalfd_siginfo)) - { - if (fdsi.ssi_signo == SIGCHLD) - handle_sigchld(); - } - - osc_server->wait( 1000 ); - - purge_dead_clients(); + wait( 1000 ); } // osc_server->run();