From 784d17c9c3818f9afa2dd5d69bb5ded1a589d38b Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Wed, 20 Jul 2005 21:36:35 +0000
Subject: [PATCH] Fix accounting bug (Andy Riebs, HP).

---
 NEWS                                  | 5 +++++
 src/plugins/jobacct/log/jobacct_log.c | 6 ++++++
 2 files changed, 11 insertions(+)

diff --git a/NEWS b/NEWS
index 9008e33f350..6b070e6c1cc 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,11 @@
 This file describes changes in recent versions of SLURM. It primarily
 documents those changes that are of interest to users and admins. 
 
+* Changes in SLURM 0.5.0-pre20
+==============================
+ -- Fix race condition in job accouting plugin, could hang slurmd
+ -- Report SlurmUser id over 16 bits as an error (fix on v0.6)
+
 * Changes in SLURM 0.5.0-pre19
 ==============================
  -- Fix memory management bug in federation driver
diff --git a/src/plugins/jobacct/log/jobacct_log.c b/src/plugins/jobacct/log/jobacct_log.c
index 6d8e2f9839a..ef8cb2ba05d 100644
--- a/src/plugins/jobacct/log/jobacct_log.c
+++ b/src/plugins/jobacct/log/jobacct_log.c
@@ -738,6 +738,7 @@ int slurmd_jobacct_task_exit(slurmd_job_t *job, pid_t pid, int status, struct ru
 	if (prec_frequency) {	/* if dynamic monitoring */
 		slurm_mutex_lock(&precTable_lock); /* let watcher finish loop */
 		pthread_cancel(_watch_tasks_thread_id); 
+		pthread_join(_watch_tasks_thread_id,NULL);
 		slurm_mutex_unlock(&precTable_lock);
 		jrec->max_psize			= max_psize;
 		jrec->max_vsize			= max_vsize;
@@ -1585,10 +1586,15 @@ static int _unpack_jobrec(_jrec_t *outrec, _jrec_t *inrec) {
 
 static void *_watch_tasks(void *arg) {
 
+	int	tmp;
+
 	while(1) {	/* Do this until slurm_jobacct_task_exit() stops us */
 		sleep(prec_frequency);
+		pthread_testcancel();
 		slurm_mutex_lock(&precTable_lock);
+		pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &tmp);
 		_get_process_data();	/* Update the data */ 
 		slurm_mutex_unlock(&precTable_lock);
+		pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &tmp);
 	} 
 }
-- 
GitLab