[launchd-changes] [23369] trunk/launchd/src/launchd_core_logic.c
source_changes at macosforge.org
source_changes at macosforge.org
Tue Sep 11 13:05:16 PDT 2007
Revision: 23369
http://trac.macosforge.org/projects/launchd/changeset/23369
Author: zarzycki at apple.com
Date: 2007-09-11 13:05:15 -0700 (Tue, 11 Sep 2007)
Log Message:
-----------
<rdar://problem/5418922> modifying the date/time confuses launchd's timers
Modified Paths:
--------------
trunk/launchd/src/launchd_core_logic.c
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2007-09-10 20:43:52 UTC (rev 23368)
+++ trunk/launchd/src/launchd_core_logic.c 2007-09-11 20:05:15 UTC (rev 23369)
@@ -23,6 +23,7 @@
#include <mach/mach.h>
#include <mach/mach_error.h>
+#include <mach/mach_time.h>
#include <mach/boolean.h>
#include <mach/message.h>
#include <mach/notify.h>
@@ -348,8 +349,8 @@
unsigned int exit_timeout;
int stdout_err_fd;
struct timeval sent_sigterm_time;
- time_t start_time;
- time_t min_run_time;
+ uint64_t start_time;
+ uint32_t min_run_time;
unsigned int start_interval;
unsigned int checkedin:1, anonymous:1, debug:1, inetcompat:1, inetcompat_wait:1,
ondemand:1, session_create:1, low_pri_io:1, no_init_groups:1, priv_port_has_senders:1,
@@ -2284,15 +2285,20 @@
void
job_start(job_t j)
{
+ static mach_timebase_info_data_t tbi;
+ uint64_t td, tnow = mach_absolute_time();
int spair[2];
int execspair[2];
int oepair[2];
char nbuf[64];
pid_t c;
bool sipc = false;
- time_t td;
u_int proc_fflags = /* NOTE_EXEC|NOTE_FORK| */ NOTE_EXIT /* |NOTE_REAP */;
+ if (tbi.denom == 0) {
+ launchd_assert(mach_timebase_info(&tbi) == 0);
+ }
+
if (!job_assumes(j, j->mgr != NULL)) {
return;
}
@@ -2302,7 +2308,8 @@
return;
}
- td = time(NULL) - j->start_time;
+ td = (tnow - j->start_time) * tbi.numer / tbi.denom;
+ td /= NSEC_PER_SEC;
if (td < j->min_run_time && !j->legacy_mach_job && !j->inetcompat) {
time_t respawn_delta = j->min_run_time - td;
@@ -2334,7 +2341,7 @@
job_assumes(j, kevent_mod(j->log_redirect_fd, EVFILT_READ, EV_ADD, 0, 0, j) != -1);
}
- time(&j->start_time);
+ j->start_time = tnow;
switch (c = runtime_fork(j->weird_bootstrap ? j->j_port : j->mgr->jm_port)) {
case -1:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070911/b395a59c/attachment.html
More information about the launchd-changes
mailing list