ken@cs.cornell.edu (Ken Birman) (06/11/91)
The following seems to be a useable work-around for the SUN OS problem mentioned above, namely a failure to detect client termination using the SIGPIPE method. In protos/pr_client.c, add the following at the end of client_init.c, right after the listen() system call: # if (SUN) { void client_check(); (void)timeout(10000, client_check, 0); } # endif Now, after the procedure called client_lookup add the following new code: /* Only needed on SUN OS */ void check_clients() { #ifdef SUN register sd; (void)timeout(10000, check_clients, 0); for(sd = 0; sd < max_cl; sd++) if(cl[sd].cl_pid > 0 && kill(cl[sd].cl_pid, SIGIO) == -1 && errno == ESRCH) client_failed(sd, TRUE); #endif SUN } Rebuild protos with this change, and within 10 seconds after a program that uses ISIS has terminated, the system should notice. Obviously, detection will be faster if the SIGPIPE occurs normally. -- Kenneth P. Birman E-mail: ken@cs.cornell.edu 4105 Upson Hall, Dept. of Computer Science TEL: 607 255-9199 (office) Cornell University Ithaca, NY 14853 (USA) FAX: 607 255-4428