From cb6589da1fb0f7263723cb4d7e36df830161798c Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Fri, 24 May 2013 10:35:23 -0700
Subject: [PATCH] Handle timers differently to give us the delta_t without
 having to call and extra function

---
 src/common/timers.c           | 27 ++++++---------------------
 src/common/timers.h           | 21 +++++++--------------
 src/slurmctld/job_scheduler.c | 13 ++++++-------
 3 files changed, 19 insertions(+), 42 deletions(-)

diff --git a/src/common/timers.c b/src/common/timers.c
index e8967cc3b80..04be43ff606 100644
--- a/src/common/timers.c
+++ b/src/common/timers.c
@@ -49,21 +49,20 @@
  * IN len_tv_str - size of tv_str in bytes
  * IN from - where the function was called form
  */
-extern void slurm_diff_tv_str(struct timeval *tv1,struct timeval *tv2,
+extern void slurm_diff_tv_str(struct timeval *tv1, struct timeval *tv2,
 			      char *tv_str, int len_tv_str, char *from,
-			      long limit)
+			      long limit, long *delta_t)
 {
 	char p[64] = "";
 	struct tm tm;
-	long delta_t;
 
-	delta_t  = (tv2->tv_sec  - tv1->tv_sec) * 1000000;
-	delta_t +=  tv2->tv_usec - tv1->tv_usec;
+	(*delta_t)  = (tv2->tv_sec  - tv1->tv_sec) * 1000000;
+	(*delta_t) +=  tv2->tv_usec - tv1->tv_usec;
+	snprintf(tv_str, len_tv_str, "usec=%ld", *delta_t);
 	if (from) {
 		if (!limit)
 			limit = 1000000;
-		if (delta_t > limit) {
-			snprintf(tv_str, len_tv_str, "usec=%ld", delta_t);
+		if (*delta_t > limit) {
 			if (!localtime_r(&tv2->tv_sec, &tm))
 				fprintf(stderr, "localtime_r() failed\n");
 			if (strftime(p, sizeof(p), "%T", &tm) == 0)
@@ -74,17 +73,3 @@ extern void slurm_diff_tv_str(struct timeval *tv1,struct timeval *tv2,
 		}
 	}
 }
-
-/*
- * slurm_diff_tv - return the difference between two times
- * IN tv1 - start of event
- * IN tv2 - end of event
- * RET time in micro-seconds
- */
-extern long slurm_diff_tv(struct timeval *tv1, struct timeval *tv2)
-{
-	long delta_t;
-	delta_t  = (tv2->tv_sec  - tv1->tv_sec) * 1000000;
-	delta_t +=  tv2->tv_usec - tv1->tv_usec;
-	return delta_t;
-}
diff --git a/src/common/timers.h b/src/common/timers.h
index 3131defc453..e165830e134 100644
--- a/src/common/timers.h
+++ b/src/common/timers.h
@@ -41,15 +41,15 @@
 
 #include <sys/time.h>
 
-#define DEF_TIMERS	struct timeval tv1, tv2; char tv_str[20] = ""
+#define DEF_TIMERS	struct timeval tv1, tv2; char tv_str[20] = ""; long delta_t;
 #define START_TIMER	gettimeofday(&tv1, NULL)
 #define END_TIMER	gettimeofday(&tv2, NULL); \
-                	slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, NULL, 0)
+	slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, NULL, 0, &delta_t)
 #define END_TIMER2(from) gettimeofday(&tv2, NULL); \
-	                 slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, 0)
+	slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, 0, &delta_t)
 #define END_TIMER3(from, limit) gettimeofday(&tv2, NULL); \
-	                        slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, limit)
-#define DELTA_TIMER	slurm_diff_tv(&tv1, &tv2)
+	slurm_diff_tv_str(&tv1, &tv2, tv_str, 20, from, limit, &delta_t)
+#define DELTA_TIMER	delta_t
 #define TIME_STR 	tv_str
 
 /*
@@ -61,17 +61,10 @@
  * IN len_tv_str - size of tv_str in bytes
  * IN from - Name to be printed on long diffs
  * IN limit - limit to wait
+ * OUT delta_t - raw time difference in usec
  */
 extern void slurm_diff_tv_str(struct timeval *tv1,struct timeval *tv2,
 			      char *tv_str, int len_tv_str, char *from,
-			      long limit);
-
-/*
- * slurm_diff_tv - return the difference between two times
- * IN tv1 - start of event
- * IN tv2 - end of event
- * RET time in micro-seconds
- */
-extern long slurm_diff_tv(struct timeval *tv1, struct timeval *tv2);
+			      long limit, long *delta_t);
 
 #endif
diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c
index 36e3d050817..6c682fdce8f 100644
--- a/src/slurmctld/job_scheduler.c
+++ b/src/slurmctld/job_scheduler.c
@@ -401,14 +401,13 @@ static bool _failed_partition(struct part_record *part_ptr,
 	return false;
 }
 
-static void do_diag_stats(struct timeval tv1, struct timeval tv2)
+static void _do_diag_stats(long delta_t)
 {
-	if (slurm_diff_tv(&tv1,&tv2) > slurmctld_diag_stats.schedule_cycle_max)
-		slurmctld_diag_stats.schedule_cycle_max = slurm_diff_tv(&tv1,
-									&tv2);
+	if (delta_t > slurmctld_diag_stats.schedule_cycle_max)
+		slurmctld_diag_stats.schedule_cycle_max = delta_t;
 
-	slurmctld_diag_stats.schedule_cycle_sum += slurm_diff_tv(&tv1, &tv2);
-	slurmctld_diag_stats.schedule_cycle_last = slurm_diff_tv(&tv1, &tv2);
+	slurmctld_diag_stats.schedule_cycle_sum += delta_t;
+	slurmctld_diag_stats.schedule_cycle_last = delta_t;
 	slurmctld_diag_stats.schedule_cycle_counter++;
 }
 
@@ -1080,7 +1079,7 @@ next_part:			part_ptr = (struct part_record *)
 	unlock_slurmctld(job_write_lock);
 	END_TIMER2("schedule");
 
-	do_diag_stats(tv1, tv2);
+	_do_diag_stats(DELTA_TIMER);
 
 	return job_cnt;
 }
-- 
GitLab