From 0416c0b9225a2976bb6e4cae1e3e941f121ac957 Mon Sep 17 00:00:00 2001
From: tewk <tewk@unknown>
Date: Fri, 12 Jul 2002 19:21:37 +0000
Subject: [PATCH] Fixed job kill rpc function

---
 src/slurmd/shmem_struct.c | 19 +++++++++++++++++++
 src/slurmd/shmem_struct.h |  2 ++
 src/slurmd/task_mgr.c     | 22 +++++++++-------------
 3 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/slurmd/shmem_struct.c b/src/slurmd/shmem_struct.c
index 74903b21cd7..a8d5e93d38b 100644
--- a/src/slurmd/shmem_struct.c
+++ b/src/slurmd/shmem_struct.c
@@ -195,3 +195,22 @@ int find_job_id_for_session ( slurmd_shmem_t * shmem , int session_id )
 	info ( "No job_id found for session_id %i", session_id );
 	return SLURM_FAILURE ; 
 }
+
+void * find_job_step ( slurmd_shmem_t * shmem , int job_id , int job_step_id ) 
+{
+	int i ;
+	pthread_mutex_lock ( & shmem -> mutex ) ;
+	for ( i=0 ; i < MAX_JOB_STEPS ; i ++ )
+        {
+		if (shmem -> job_steps[i].used == false 
+				&& shmem -> job_steps[i].job_id == job_id 
+				&& shmem -> job_steps[i].job_step_id == job_step_id 
+			)
+		{
+			pthread_mutex_unlock ( & shmem -> mutex ) ;
+			return & shmem -> job_steps[i] ;
+		} 
+        }
+	pthread_mutex_unlock ( & shmem -> mutex ) ;
+	return (void * ) SLURM_ERROR ;
+}
diff --git a/src/slurmd/shmem_struct.h b/src/slurmd/shmem_struct.h
index c3d1be92b49..a0cb853c7f8 100644
--- a/src/slurmd/shmem_struct.h
+++ b/src/slurmd/shmem_struct.h
@@ -54,4 +54,6 @@ void * alloc_task ( slurmd_shmem_t * shmem , job_step_t * job_step ) ;
 int find_job_id_for_session ( slurmd_shmem_t * shmem , int session_id ) ;
 /* clears a job_step and associated task list for future use */
 int deallocate_job_step ( job_step_t * jobstep ) ;
+/* find a particular job_step */
+void * find_job_step ( slurmd_shmem_t * shmem , int job_id , int job_step_id ) ;
 #endif
diff --git a/src/slurmd/task_mgr.c b/src/slurmd/task_mgr.c
index c2bafece4cf..87029880382 100644
--- a/src/slurmd/task_mgr.c
+++ b/src/slurmd/task_mgr.c
@@ -464,24 +464,20 @@ int setup_child_pipes ( int * pipes )
 int kill_tasks ( kill_tasks_msg_t * kill_task_msg )
 {
 	int error_code = SLURM_SUCCESS ;
-
+	slurmd_shmem_t * shmem_ptr = get_shmem ( ) ;
+	job_step_t * job_step_ptr = find_job_step ( shmem_ptr , kill_task_msg -> job_id , kill_task_msg -> job_step_id ) ;
+	task_t * task_ptr = job_step_ptr -> head_task ;
+	while ( task_ptr != NULL )
+	{
+		kill_task ( task_ptr ) ;
+		task_ptr = task_ptr -> next ;
+	}
 	return error_code ;
 }
 
 
 int kill_task ( task_t * task )
 {
-	return SLURM_SUCCESS ;
-}
-
-int setup_task_env  (task_start_t * task_start )
-{
-	int i ;
-	for ( i = 0 ; i < task_start -> launch_msg -> envc ; i ++ )
-	{
-		char * env_var = xmalloc ( strlen (  task_start -> launch_msg -> env[i] ) ) ;
-		memcpy ( env_var , task_start -> launch_msg -> env[i] , strlen (  task_start -> launch_msg -> env[i] ) ) ;
-		putenv ( env_var ) ;
-	}
+	kill ( task -> task_start . exec_pid , SIGKILL ) ;
 	return SLURM_SUCCESS ;
 }
-- 
GitLab