summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/lib/time.c28
-rw-r--r--source3/printing/nt_printing.c9
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);
}
/*