X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=utils%2Fgssd%2Fgssd_main_loop.c;h=9954ffb0c2a3f3c2c9ecd0158001cd4c809ade02;hb=6019ff50055ee189557b55aad781bb12beb95e19;hp=b06c223294f2f0aadc928ba8d73d6b711e164ba0;hpb=f89b109c04a8eab81bfa8b8fcdc7692673e13e49;p=nfs-utils.git diff --git a/utils/gssd/gssd_main_loop.c b/utils/gssd/gssd_main_loop.c index b06c223..9954ffb 100644 --- a/utils/gssd/gssd_main_loop.c +++ b/utils/gssd/gssd_main_loop.c @@ -61,9 +61,9 @@ extern int pollsize; static volatile int dir_changed = 1; -static void dir_notify_handler(int sig, siginfo_t *si, void *data) +static void dir_notify_handler(int sig) { - printerr(2, "dir_notify_handler: sig %d si %p data %p\n", sig, si, data); + printerr(2, "dir_notify_handler: sig %d\n", sig); dir_changed = 1; } @@ -78,8 +78,10 @@ scan_poll_results(int ret) { i = clp->gssd_poll_index; if (i >= 0 && pollarray[i].revents) { - if (pollarray[i].revents & POLLHUP) + if (pollarray[i].revents & POLLHUP) { + clp->gssd_close_me = 1; dir_changed = 1; + } if (pollarray[i].revents & POLLIN) handle_gssd_upcall(clp); pollarray[clp->gssd_poll_index].revents = 0; @@ -89,8 +91,10 @@ scan_poll_results(int ret) } i = clp->krb5_poll_index; if (i >= 0 && pollarray[i].revents) { - if (pollarray[i].revents & POLLHUP) + if (pollarray[i].revents & POLLHUP) { + clp->krb5_close_me = 1; dir_changed = 1; + } if (pollarray[i].revents & POLLIN) handle_krb5_upcall(clp); pollarray[clp->krb5_poll_index].revents = 0; @@ -98,17 +102,6 @@ scan_poll_results(int ret) if (!ret) break; } - i = clp->spkm3_poll_index; - if (i >= 0 && pollarray[i].revents) { - if (pollarray[i].revents & POLLHUP) - dir_changed = 1; - if (pollarray[i].revents & POLLIN) - handle_spkm3_upcall(clp); - pollarray[clp->spkm3_poll_index].revents = 0; - ret--; - if (!ret) - break; - } } }; @@ -190,13 +183,12 @@ void gssd_run() { int ret; - struct sigaction dn_act; + struct sigaction dn_act = { + .sa_handler = dir_notify_handler + }; sigset_t set; - /* Taken from linux/Documentation/dnotify.txt: */ - dn_act.sa_sigaction = dir_notify_handler; sigemptyset(&dn_act.sa_mask); - dn_act.sa_flags = SA_SIGINFO; sigaction(DNOTIFY_SIGNAL, &dn_act, NULL); /* just in case the signal is blocked... */