From a2a40cb8eeca742ab3f3315aa0e1ff0b75c5c4e9 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@llnl.gov>
Date: Tue, 19 May 2009 15:44:20 +0000
Subject: [PATCH] fix for reservations and step info to return the correct data

---
 src/sview/job_info.c  | 20 ++++++++++++++++----
 src/sview/resv_info.c |  8 +++++++-
 src/sview/sview.c     |  1 +
 3 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/sview/job_info.c b/src/sview/job_info.c
index 4eb7a7ee279..8e01556150c 100644
--- a/src/sview/job_info.c
+++ b/src/sview/job_info.c
@@ -2464,10 +2464,14 @@ extern int get_new_info_job_step(job_step_info_response_msg_t **info_ptr,
 	int error_code = SLURM_NO_CHANGE_IN_DATA;
 	time_t now = time(NULL);
 	static time_t last;
+	static bool changed = 0;
 		
 	if(!force && ((now - last) < global_sleep_time)) {
-		error_code = SLURM_NO_CHANGE_IN_DATA;
+		if(*info_ptr != old_step_ptr) 
+			error_code = SLURM_SUCCESS;
 		*info_ptr = old_step_ptr;
+		if(changed) 
+			return SLURM_SUCCESS;
 		return error_code;
 	}
 	last = now;
@@ -2476,16 +2480,24 @@ extern int get_new_info_job_step(job_step_info_response_msg_t **info_ptr,
 		error_code = slurm_get_job_steps(old_step_ptr->last_update, 
 						 0, 0, &new_step_ptr, 
 						 show_flags);
-		if (error_code ==  SLURM_SUCCESS)
+		if (error_code == SLURM_SUCCESS) {
 			slurm_free_job_step_info_response_msg(old_step_ptr);
-		else if (slurm_get_errno () == SLURM_NO_CHANGE_IN_DATA) {
+			changed = 1;
+		} else if (slurm_get_errno () == SLURM_NO_CHANGE_IN_DATA) {
 			error_code = SLURM_NO_CHANGE_IN_DATA;
 			new_step_ptr = old_step_ptr;
+			changed = 0;
 		}
-	} else
+	} else {
 		error_code = slurm_get_job_steps((time_t) NULL, 0, 0, 
 						 &new_step_ptr, show_flags);
+		changed = 1;
+	}
 	old_step_ptr = new_step_ptr;
+
+	if(*info_ptr != old_step_ptr) 
+		error_code = SLURM_SUCCESS;
+
 	*info_ptr = new_step_ptr;
 	return error_code;
 }
diff --git a/src/sview/resv_info.c b/src/sview/resv_info.c
index a626e4eac36..068cac31abc 100644
--- a/src/sview/resv_info.c
+++ b/src/sview/resv_info.c
@@ -806,7 +806,8 @@ extern int get_new_info_resv(reserve_info_msg_t **info_ptr,
 	static bool changed = 0;
 		
 	if(!force && ((now - last) < global_sleep_time)) {
-		error_code = SLURM_NO_CHANGE_IN_DATA;
+		if(*info_ptr != resv_info_ptr) 
+			error_code = SLURM_SUCCESS;
 		*info_ptr = resv_info_ptr;
 		if(changed) 
 			return SLURM_SUCCESS;
@@ -829,7 +830,12 @@ extern int get_new_info_resv(reserve_info_msg_t **info_ptr,
 						     &new_resv_ptr);
 		changed = 1;
 	}
+
 	resv_info_ptr = new_resv_ptr;
+
+	if(*info_ptr != resv_info_ptr) 
+		error_code = SLURM_SUCCESS;
+
 	*info_ptr = new_resv_ptr;
 	return error_code;
 }
diff --git a/src/sview/sview.c b/src/sview/sview.c
index f4981a669a9..cc832a9bc13 100644
--- a/src/sview/sview.c
+++ b/src/sview/sview.c
@@ -547,6 +547,7 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook)
 	/* Finally, return the actual menu bar created by the item factory. */
 	return gtk_ui_manager_get_widget (ui_manager, "/main");
 }
+
 void *_popup_thr_main(void *arg)
 {
 	popup_thr(arg);		
-- 
GitLab