⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 86

📁 Unix/Linux 网络时间协议版本3 Network Time Protocol Version 3 (NTP) distribution for Unix systems
💻
字号:
Received: from snow-white.ee.udel.edu by whimsy.udel.edu id aa18664;          11 Feb 97 10:33 GMTReceived: from sunrise.gv.tsc.tdk.com (root@sunrise.gv.tsc.tdk.com [192.168.241.191])          by gatekeeper.tsc.tdk.com (8.8.4/8.8.4) with ESMTP	  id CAA19140 for <stenn@whimsy.udel.edu>; Tue, 11 Feb 1997 02:33:10 -0800 (PST)Received: from salsa.gv.tsc.tdk.com (salsa.gv.tsc.tdk.com [192.168.241.194])          by sunrise.gv.tsc.tdk.com (8.8.4/8.8.4) with ESMTP	  id CAA06659 for <stenn@whimsy.udel.edu>; Tue, 11 Feb 1997 02:33:09 -0800 (PST)Received: (from gdonl@localhost)          by salsa.gv.tsc.tdk.com (8.8.4/8.8.4)	  id CAA26417; Tue, 11 Feb 1997 02:33:08 -0800 (PST)From: Don Lewis <Don.Lewis@tsc.tdk.com>Message-Id: <199702111033.CAA26417@salsa.gv.tsc.tdk.com>Date: Tue, 11 Feb 1997 02:33:07 -0800In-Reply-To: stenn@whimsy.udel.edu       "Re: xntpd ntp_io.c input_handler reentered unsafely" (Feb 11,  3:07am)X-Mailer: Mail User's Shell (7.2.6 alpha(3) 7/19/95)To: stenn@whimsy.udel.eduSubject: Re: xntpd ntp_io.c input_handler reentered unsafelyCc: Don.Lewis@tsc.tdk.comI studied the code some more, and it has to keep the signal handlerrather than reset it to SIG_DFL.  Otherwise the SIGALRM handler wouldonly work once.} If you have any suggestions or patches on how to handle things with} xntpd, I'd be happy to receive them.} } 5.89.5 is already out, and there might be another release due out soon} with some more small changes to input_handler in ntp_io.c .Here's a patch vs. 5.89.5.  The changes are:	configure.in to looks for sigvec()	matching change to config.h.in	libntp/syssignal.c changed to use the appropriate signal	implementation	bogus call to sigset() in sigio_handler() removed	sigio handler saves and restores errno, otherwise	errno could be corrupted outside the signal context	set_signal() always just calls signal_no_reset(),	the mask twiddling stuff in the sigaction() version	was redundant	save and restore errno in the debug signal handlers in	xntpd/ntpd.c Not changed:	configure isn't any smarter about HAVE_SIGNALED_IO	reentrant calls to msyslog() are possible since it is	called from within the signal handlers and from the part	of the loop in worker_thread where signals are not blocked	(the debug signals aren't blocked at all).  Core dumps could	result ...These changes at at least compile under Solaris 2.5.1 and SunOS 4.1.4 ...*** ORIGconfig.h.in	Wed Feb  5 00:04:51 1997--- config.h.in	Tue Feb 11 01:38:16 1997****************** 462,467 ****--- 462,470 ----  /* Define if you have the sigaction function.  */  #undef HAVE_SIGACTION  + /* Define if you have the sigvec function.  */+ #undef HAVE_SIGVEC+   /* Define if you have the sigset function.  */  #undef HAVE_SIGSET  *** ORIGconfigure.in	Mon Feb 10 17:27:27 1997--- configure.in	Tue Feb 11 01:02:37 1997****************** 284,290 ****  AC_CHECK_FUNCS(gettimeofday getuid K_open kvm_open memcpy memmove memset nice)  AC_CHECK_FUNCS(nlist ntp_adjtime ntp_gettime plock pututline pututxline rtprio)  AC_CHECK_FUNCS(setlinebuf setpgid setpriority setsid settimeofday setvbuf)! AC_CHECK_FUNCS(sigaction sigset sigsuspend stime strchr sysconf uname updwtmp)  AC_CHECK_FUNCS(updwtmpx vsprintf)    AC_CACHE_CHECK(number of arguments to gettimeofday(), ac_cv_func_Xettimeofday_nargs,--- 284,290 ----  AC_CHECK_FUNCS(gettimeofday getuid K_open kvm_open memcpy memmove memset nice)  AC_CHECK_FUNCS(nlist ntp_adjtime ntp_gettime plock pututline pututxline rtprio)  AC_CHECK_FUNCS(setlinebuf setpgid setpriority setsid settimeofday setvbuf)! AC_CHECK_FUNCS(sigaction sigvec sigset sigsuspend stime strchr sysconf uname updwtmp)  AC_CHECK_FUNCS(updwtmpx vsprintf)    AC_CACHE_CHECK(number of arguments to gettimeofday(), ac_cv_func_Xettimeofday_nargs,*** libntp/ORIGsyssignal.c	Sat Feb  1 00:47:37 1997--- libntp/syssignal.c	Tue Feb 11 01:37:20 1997****************** 47,60 ****      }  }  ! #else  /* not HAVE_SIGACTION */  ! RETSIGTYPE  signal_no_reset(sig, func)  int sig;  RETSIGTYPE (*func) P((int));  {!     signal(sig, func);  }- #endif /* not HAVE_SIGACTION */  --- 47,102 ----      }  }  ! #elif  HAVE_SIGVEC  ! void  signal_no_reset(sig, func)  int sig;  RETSIGTYPE (*func) P((int));  {!     struct sigvec sv;!     int n;! !     bzero((char *) &sv, sizeof(sv));!     sv.sv_handler = func;!     n = sigvec(sig, &sv, (struct sigvec *)NULL);!     if (n == -1) {! 	perror("sigvec");!         exit(1);!     }  }  + #elif  HAVE_SIGSET+ + void+ signal_no_reset(sig, func)+ int sig;+ RETSIGTYPE (*func) P((int));+ {+     int n;+ +     n = sigset(sig, func);+     if (n == -1) {+ 	perror("sigset");+         exit(1);+     }+ }+ + #else + + /* Beware!  This implementation resets the signal to SIG_DFL */+ void+ signal_no_reset(sig, func)+ int sig;+ RETSIGTYPE (*func) P((int));+ {+     int n;+ +     n = signal(sig, func);+     if (n == -1) {+ 	perror("signal");+         exit(1);+     }+ }+ + #endif*** xntpd/ORIGntp_io.c	Mon Feb 10 17:11:19 1997--- xntpd/ntp_io.c	Tue Feb 11 01:40:08 1997****************** 2043,2067 ****  sigio_handler(sig)       int sig;  {    l_fp ts;  - # ifdef HAVE_SIGSET-   /*-    * This should not be necessary for a signal previously set with-    * sigset().-    */- #  if defined(USE_SIGIO)-   if (sigset(SIGIO, sigio_handler) == SIG_ERR)-     msyslog(LOG_ERR, "sigio_handler: sigset(SIGIO) failed: %m");- #  endif- #  if defined(USE_SIGPOLL)-   if (sigset(SIGPOLL, sigio_handler) == SIG_ERR)-     msyslog(LOG_ERR, "sigio_handler: sigset(SIGPOLL) failed: %m");- #  endif- # endif /* HAVE_SIGSET */-     get_systime(&ts);    (void)input_handler(&ts);  }    /*--- 2043,2054 ----  sigio_handler(sig)       int sig;  {+   int saved_errno = errno;    l_fp ts;      get_systime(&ts);    (void)input_handler(&ts);+   errno = saved_errno;  }    /******************* 2071,2121 ****  static void  set_signal()  {-   int n;-   struct sigaction vec;- -   sigemptyset(&vec.sa_mask);-   #  ifdef USE_SIGIO!   sigaddset(&vec.sa_mask, SIGIO);! #  endif  #  ifdef USE_SIGPOLL!   sigaddset(&vec.sa_mask, SIGPOLL);! #  endif!   vec.sa_flags = 0;! ! #  if defined(USE_SIGIO)!   vec.sa_handler =  sigio_handler;! !   while (1)!     {!       n = sigaction(SIGIO, &vec, NULL);!       if (n == -1 && errno == EINTR) continue;!       break;!     }! !   if (n == -1)!     {!       perror("sigaction");!       exit(1);!     }! #  endif! #  if defined(USE_SIGPOLL)!   vec.sa_handler =  sigio_handler;! !   while (1)!     {!       n = sigaction(SIGPOLL, &vec, NULL);!       if (n == -1 && errno == EINTR) continue;!       break;!     }! !   if (n == -1)!     {!       perror("sigaction");!       exit(1);!     }! #  endif  }    void--- 2058,2069 ----  static void  set_signal()  {  #  ifdef USE_SIGIO!   (void) signal_no_reset(SIGIO, sigio_handler);! # endif  #  ifdef USE_SIGPOLL!   (void) signal_no_reset(SIGPOLL, sigio_handler);! # endif  }    void*** xntpd/ORIGntpd.c	Wed Feb  5 22:37:17 1997--- xntpd/ntpd.c	Tue Feb 11 02:06:07 1997****************** 828,838 ****--- 828,841 ----  moredebug(sig)       int sig;  {+   int saved_errno = errno;+     if (debug < 255)      {        debug++;        msyslog(LOG_DEBUG, "debug raised to %d", debug);      }+   errno = saved_errno;  }    /******************* 842,852 ****--- 845,858 ----  lessdebug(sig)       int sig;  {+   int saved_errno = errno;+     if (debug > 0)      {        debug--;        msyslog(LOG_DEBUG, "debug lowered to %d", debug);      }+   errno = saved_errno;  }  #else /* not DEBUG */  /******************* 856,862 ****--- 862,871 ----  no_debug(sig)       int sig;  {+   int saved_errno = errno;+     msyslog(LOG_DEBUG, "xntpd not compiled for debugging (signal %d)", sig);+   errno = saved_errno;  }  #endif	/* not DEBUG */  			---  Truck

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -