diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/time.c | 28 | ||||
-rw-r--r-- | source3/printing/nt_printing.c | 9 |
2 files changed, 31 insertions, 6 deletions
diff --git a/source3/lib/time.c b/source3/lib/time.c index f0f62ca841..975c58c7a5 100644 --- a/source3/lib/time.c +++ b/source3/lib/time.c @@ -129,10 +129,34 @@ static int get_serverzone(void) /* Re-read the smb serverzone value */ +static struct timeval start_time_hires; + void TimeInit(void) { - done_serverzone_init = False; - get_serverzone(); + done_serverzone_init = False; + get_serverzone(); + /* Save the start time of this process. */ + GetTimeOfDay(&start_time_hires); +} + +/********************************************************************** + Return a timeval struct of the uptime of this process. As TimeInit is + done before a daemon fork then this is the start time from the parent + daemon start. JRA. +***********************************************************************/ + +void get_process_uptime(struct timeval *ret_time) +{ + struct timeval time_now_hires; + + GetTimeOfDay(&time_now_hires); + ret_time->tv_sec = time_now_hires.tv_sec - start_time_hires.tv_sec; + ret_time->tv_usec = time_now_hires.tv_usec - start_time_hires.tv_usec; + if (time_now_hires.tv_usec < start_time_hires.tv_usec) { + ret_time->tv_sec -= 1; + ret_time->tv_usec = 1000000 + (time_now_hires.tv_usec - start_time_hires.tv_usec); + } else + ret_time->tv_usec = time_now_hires.tv_usec - start_time_hires.tv_usec; } /******************************************************************* diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index d1ab5ce21d..608ba9f21f 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -2651,10 +2651,11 @@ void get_printer_subst_params(int snum, fstring *printername, fstring *sharename static uint32 rev_changeid(void) { - static time_t start_time; - if (start_time == 0) - start_time = time(NULL); - return (((time(NULL) - start_time)+1)*1000); + struct timeval tv; + + get_process_uptime(&tv); + /* This value is in ms * 100 */ + return (tv.tv_sec * 100000) + (tv.tv_usec / 10); } /* |