Backport POSIX timers.
This commit is contained in:
		
							parent
							
								
									9b663b75a8
								
							
						
					
					
						commit
						5b86b9d85e
					
				
							
								
								
									
										111
									
								
								at-3.1.14-usePOSIXtimers.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								at-3.1.14-usePOSIXtimers.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,111 @@ | |||||||
|  | diff -up at-3.1.14/atd.c.timers at-3.1.14/atd.c
 | ||||||
|  | --- at-3.1.14/atd.c.timers	2013-12-02 11:03:01.250080057 +0100
 | ||||||
|  | +++ at-3.1.14/atd.c	2013-12-02 11:06:15.560243498 +0100
 | ||||||
|  | @@ -831,6 +831,54 @@ run_loop()
 | ||||||
|  |      return next_job; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +#ifdef HAVE_CLOCK_GETTIME
 | ||||||
|  | +timer_t timer;
 | ||||||
|  | +struct itimerspec timeout;
 | ||||||
|  | +
 | ||||||
|  | +void timer_setup()
 | ||||||
|  | +{
 | ||||||
|  | +    struct sigevent sev;
 | ||||||
|  | +
 | ||||||
|  | +    sev.sigev_notify = SIGEV_SIGNAL;
 | ||||||
|  | +    sev.sigev_signo = SIGHUP;
 | ||||||
|  | +    sev.sigev_value.sival_ptr = &timer;
 | ||||||
|  | +
 | ||||||
|  | +    memset(&timeout, 0, sizeof(timeout));
 | ||||||
|  | +
 | ||||||
|  | +    if (timer_create(CLOCK_REALTIME, &sev, &timer) < 0)
 | ||||||
|  | +           pabort("unable to create timer");
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +time_t atd_gettime()
 | ||||||
|  | +{
 | ||||||
|  | +    struct timespec curtime;
 | ||||||
|  | +
 | ||||||
|  | +    clock_gettime(CLOCK_REALTIME, &curtime);
 | ||||||
|  | +
 | ||||||
|  | +    return curtime.tv_sec;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +void atd_setalarm(time_t next)
 | ||||||
|  | +{
 | ||||||
|  | +    timeout.it_value.tv_sec = next;
 | ||||||
|  | +    timer_settime(timer, TIMER_ABSTIME, &timeout, NULL);
 | ||||||
|  | +    pause();
 | ||||||
|  | +}
 | ||||||
|  | +#else
 | ||||||
|  | +void timer_setup()
 | ||||||
|  | +{
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +time_t atd_gettime()
 | ||||||
|  | +{
 | ||||||
|  | +    return time(NULL);
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +void atd_setalarm(time_t next)
 | ||||||
|  | +{
 | ||||||
|  | +    sleep(next - atd_gettime());
 | ||||||
|  | +}
 | ||||||
|  | +#endif
 | ||||||
|  |  /* Global functions */ | ||||||
|  |   | ||||||
|  |  int | ||||||
|  | @@ -936,7 +984,7 @@ main(int argc, char *argv[])
 | ||||||
|  |      sigaction(SIGCHLD, &act, NULL); | ||||||
|  |   | ||||||
|  |      if (!run_as_daemon) { | ||||||
|  | -	now = time(NULL);
 | ||||||
|  | +	now = atd_gettime();
 | ||||||
|  |  	run_loop(); | ||||||
|  |  	exit(EXIT_SUCCESS); | ||||||
|  |      } | ||||||
|  | @@ -959,13 +1007,14 @@ main(int argc, char *argv[])
 | ||||||
|  |      act.sa_handler = set_term; | ||||||
|  |      sigaction(SIGINT, &act, NULL); | ||||||
|  |   | ||||||
|  | +    timer_setup();
 | ||||||
|  |      daemon_setup(); | ||||||
|  |   | ||||||
|  |      do { | ||||||
|  | -	now = time(NULL);
 | ||||||
|  | +	now = atd_gettime();
 | ||||||
|  |  	next_invocation = run_loop(); | ||||||
|  |  	if (next_invocation > now) { | ||||||
|  | -	    sleep(next_invocation - now);
 | ||||||
|  | +	    atd_setalarm(next_invocation);
 | ||||||
|  |  	} | ||||||
|  |      } while (!term_signal); | ||||||
|  |      daemon_cleanup(); | ||||||
|  | diff -up at-3.1.14/config.h.in.timers at-3.1.14/config.h.in
 | ||||||
|  | --- at-3.1.14/config.h.in.timers	2013-12-02 11:00:27.000000000 +0100
 | ||||||
|  | +++ at-3.1.14/config.h.in	2013-12-02 11:02:06.521033976 +0100
 | ||||||
|  | @@ -38,6 +38,9 @@
 | ||||||
|  |  /* Define to 1 if you have the `getloadavg' function. */ | ||||||
|  |  #undef HAVE_GETLOADAVG | ||||||
|  |   | ||||||
|  | +/* Define to 1 if you have the `clock_gettime' function. */
 | ||||||
|  | +#undef HAVE_TIMER_CREATE
 | ||||||
|  | +
 | ||||||
|  |  /* Define to 1 if you have the <getopt.h> header file. */ | ||||||
|  |  #undef HAVE_GETOPT_H | ||||||
|  |   | ||||||
|  | diff -up at-3.1.14/configure.ac.timers at-3.1.14/configure.ac
 | ||||||
|  | --- at-3.1.14/configure.ac.timers	2013-12-02 11:00:27.000000000 +0100
 | ||||||
|  | +++ at-3.1.14/configure.ac	2013-12-02 11:02:45.217066560 +0100
 | ||||||
|  | @@ -254,6 +254,10 @@ AC_CHECK_LIB(selinux, is_selinux_enabled
 | ||||||
|  |  AC_SUBST(SELINUXLIB) | ||||||
|  |  AC_SUBST(WITH_SELINUX) | ||||||
|  |   | ||||||
|  | +dnl check for POSIX timer functions
 | ||||||
|  | +AC_SEARCH_LIBS([timer_create],[rt])
 | ||||||
|  | +AC_CHECK_FUNCS([timer_create])
 | ||||||
|  | +
 | ||||||
|  |  AC_MSG_CHECKING(groupname to run under) | ||||||
|  |  AC_ARG_WITH(daemon_groupname, | ||||||
|  |  [ --with-daemon_groupname=DAEMON_GROUPNAME	Groupname to run under (default daemon) ], | ||||||
							
								
								
									
										4
									
								
								at.spec
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								at.spec
									
									
									
									
									
								
							| @ -26,7 +26,7 @@ Patch6:		at-3.1.14-nitpicks.patch | |||||||
| Patch7:		at-3.1.14-nowrap.patch | Patch7:		at-3.1.14-nowrap.patch | ||||||
| Patch8:		at-3.1.14-fix_no_export.patch  | Patch8:		at-3.1.14-fix_no_export.patch  | ||||||
| Patch9:		at-3.1.14-mailwithhostname.patch | Patch9:		at-3.1.14-mailwithhostname.patch | ||||||
| #Patch10:        at-3.1.13-usePOSIXtimers.patch | Patch10:	at-3.1.14-usePOSIXtimers.patch | ||||||
| #Patch11:        at-3.1.13-help.patch | #Patch11:        at-3.1.13-help.patch | ||||||
| 
 | 
 | ||||||
| BuildRequires: fileutils /etc/init.d | BuildRequires: fileutils /etc/init.d | ||||||
| @ -80,7 +80,7 @@ cp %{SOURCE1} . | |||||||
| %patch8 -p1 -b .export | %patch8 -p1 -b .export | ||||||
| 
 | 
 | ||||||
| %patch9 -p1 -b .mail | %patch9 -p1 -b .mail | ||||||
| #%%patch10 -p1 -b .posix | %patch10 -p1 -b .posix | ||||||
| #%%patch11 -p1 -b .help | #%%patch11 -p1 -b .help | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user