Changeset 8296 for trunk/Ohana/src/opihi/pcontrol/JobOps.c
- Timestamp:
- Aug 11, 2006, 4:51:50 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/pcontrol/JobOps.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/pcontrol/JobOps.c
r7917 r8296 4 4 Stack *JobPool_Busy; 5 5 Stack *JobPool_Done; 6 Stack *JobPool_Kill; 6 7 Stack *JobPool_Exit; 7 8 Stack *JobPool_Crash; … … 9 10 void InitJobStacks () { 10 11 JobPool_Pending = InitStack (); 11 JobPool_Busy = InitStack (); 12 JobPool_Done = InitStack (); 13 JobPool_Exit = InitStack (); 14 JobPool_Crash = InitStack (); 12 JobPool_Busy = InitStack (); 13 JobPool_Done = InitStack (); 14 JobPool_Kill = InitStack (); 15 JobPool_Exit = InitStack (); 16 JobPool_Crash = InitStack (); 15 17 } 16 18 … … 23 25 case PCONTROL_JOB_DONE: 24 26 return (JobPool_Done); 27 case PCONTROL_JOB_KILL: 28 return (JobPool_Kill); 25 29 case PCONTROL_JOB_EXIT: 26 30 return (JobPool_Exit); … … 37 41 Stack *GetJobStackByName (char *name) { 38 42 39 if (!strcasecmp (name, "pending")) 40 return (JobPool_Pending); 41 if (!strcasecmp (name, "busy")) 42 return (JobPool_Busy); 43 if (!strcasecmp (name, "done")) 44 return (JobPool_Done); 45 if (!strcasecmp (name, "exit")) 46 return (JobPool_Exit); 47 if (!strcasecmp (name, "crash")) 48 return (JobPool_Crash); 43 if (!strcasecmp (name, "pending")) return (JobPool_Pending); 44 if (!strcasecmp (name, "busy")) return (JobPool_Busy); 45 if (!strcasecmp (name, "done")) return (JobPool_Done); 46 if (!strcasecmp (name, "exit")) return (JobPool_Exit); 47 if (!strcasecmp (name, "crash")) return (JobPool_Crash); 49 48 return (NULL); 50 49 } 51 50 52 Job *FindJobStack (IDtype JobID) { 53 54 Job *job; 55 56 job = FindJobPtr (JobID, PCONTROL_JOB_PENDING); 57 if (job != NULL) return (job); 58 59 job = FindJobPtr (JobID, PCONTROL_JOB_BUSY); 60 if (job != NULL) return (job); 61 62 job = FindJobPtr (JobID, PCONTROL_JOB_EXIT); 63 if (job != NULL) return (job); 64 65 job = FindJobPtr (JobID, PCONTROL_JOB_CRASH); 66 if (job != NULL) return (job); 67 68 job = FindJobPtr (JobID, PCONTROL_JOB_DONE); 69 if (job != NULL) return (job); 70 71 return (NULL); 72 } 73 74 /* add job to position in stack */ 51 /* add job to position in stack, use StackID as default state */ 75 52 int PutJob (Job *job, int StackID, int where) { 76 53 … … 81 58 if (stack == NULL) return (FALSE); 82 59 83 /* b e default, these are both the same - to override, set state after PutJob*/60 /* by default, these are both the same - to override, use PutJobSetState */ 84 61 job[0].state = StackID; 85 62 job[0].stack = StackID; 86 stat = Pu tStack (stack, where, job);87 / * status (0, NULL); */63 stat = PushStack (stack, where, job, job[0].JobID, job[0].argv[0]); 64 // XXX need to handle the error conditions, or we drop the host & leak memory 88 65 return (stat); 89 66 } 90 67 68 /* add job to position in stack. set state to 'state' */ 69 int PutJobSetState (Job *job, int StackID, int where, int state) { 70 71 int stat; 72 Stack *stack; 73 74 stack = GetJobStack (StackID); 75 if (stack == NULL) return (FALSE); 76 77 /* alternate state specified by user */ 78 job[0].state = state; 79 job[0].stack = StackID; 80 stat = PushStack (stack, where, job, job[0].JobID, job[0].argv[0]); 81 // XXX need to handle the error conditions, or we drop the host & leak memory 82 return (stat); 83 } 84 85 Job *PullJobByID (IDtype JobID, int *StackID) { 86 87 Job *job; 88 89 *StackID = PCONTROL_JOB_PENDING; 90 job = PullJobFromStackByID (*StackID, JobID); 91 if (job != NULL) return (job); 92 93 *StackID = PCONTROL_JOB_BUSY; 94 job = PullJobFromStackByID (*StackID, JobID); 95 if (job != NULL) return (job); 96 97 *StackID = PCONTROL_JOB_EXIT; 98 job = PullJobFromStackByID (*StackID, JobID); 99 if (job != NULL) return (job); 100 101 *StackID = PCONTROL_JOB_CRASH; 102 job = PullJobFromStackByID (*StackID, JobID); 103 if (job != NULL) return (job); 104 105 *StackID = PCONTROL_JOB_DONE; 106 job = PullJobFromStackByID (*StackID, JobID); 107 if (job != NULL) return (job); 108 109 *StackID = PCONTROL_JOB_KILL; 110 job = PullJobFromStackByID (*StackID, JobID); 111 if (job != NULL) return (job); 112 113 return (NULL); 114 } 115 91 116 /* remove job from position in stack */ 92 Job * GetJob (int StackID, int where) {117 Job *PullJobFromStackByID (int StackID, int ID) { 93 118 94 119 Job *job; … … 98 123 if (stack == NULL) return (NULL); 99 124 100 job = GetStack (stack, where);125 job = PullStackByID (stack, ID); 101 126 return (job); 102 127 } 103 128 104 /* return stack position of job */ 105 int FindJob (IDtype JobID, int StackID) { 106 107 int i; 108 Job *job; 109 Stack *stack; 110 111 stack = GetJobStack (StackID); 112 if (stack == NULL) return (-2); 113 114 for (i = 0; i < stack[0].Nobject; i++) { 115 job = (Job *) stack[0].object[i]; 116 if (job[0].JobID == JobID) { 117 return (i); 118 } 119 } 120 return (-1); 121 } 122 123 /* return pointer to job */ 124 Job *FindJobPtr (IDtype JobID, int StackID) { 125 126 int i; 129 /* the Find functions are not thread-safe: DROP */ 130 # if (0) 131 Job *FindJobByID (IDtype JobID, int *StackID) { 132 133 Job *job; 134 135 *StackID = PCONTROL_JOB_PENDING; 136 job = FindJobInStackByID (*StackID, JobID); 137 if (job != NULL) return (job); 138 139 *StackID = PCONTROL_JOB_BUSY; 140 job = FindJobInStackByID (*StackID, JobID); 141 if (job != NULL) return (job); 142 143 *StackID = PCONTROL_JOB_EXIT; 144 job = FindJobInStackByID (*StackID, JobID); 145 if (job != NULL) return (job); 146 147 *StackID = PCONTROL_JOB_CRASH; 148 job = FindJobInStackByID (*StackID, JobID); 149 if (job != NULL) return (job); 150 151 *StackID = PCONTROL_JOB_DONE; 152 job = FindJobInStackByID (*StackID, JobID); 153 if (job != NULL) return (job); 154 155 return (NULL); 156 } 157 158 /* remove job from position in stack */ 159 Job *FindJobInStackByID (int StackID, int ID) { 160 127 161 Job *job; 128 162 Stack *stack; … … 131 165 if (stack == NULL) return (NULL); 132 166 133 for (i = 0; i < stack[0].Nobject; i++) { 134 job = (Job *) stack[0].object[i]; 135 if (job[0].JobID == JobID) { 136 return (job); 137 } 138 } 139 return (NULL); 140 } 141 142 /* remove job from stack, return pointer */ 143 Job *PullJob (IDtype JobID, int StackID) { 144 145 int N; 146 Job *job; 147 148 N = FindJob (JobID, StackID); 149 if (N < 0) return (NULL); 150 151 job = GetJob (StackID, N); 152 if (job == NULL) { 153 gprint (GP_ERR, "programming error! job missing from stack\n"); 154 exit (1); 155 } 167 job = FindStackByID (stack, ID); 156 168 return (job); 157 169 } 170 # endif 158 171 159 172 IDtype AddJob (char *hostname, JobMode mode, int timeout, int argc, char **argv) { 160 173 174 int JobID; 161 175 Job *job; 162 176 … … 175 189 InitIOBuffer (&job[0].stderr, 0x1000); 176 190 191 JobID = job[0].JobID; 177 192 PutJob (job, PCONTROL_JOB_PENDING, STACK_BOTTOM); 178 193 gprint (GP_ERR, "added new job\n"); 179 return ( job[0].JobID);194 return (JobID); 180 195 } 181 196 … … 212 227 213 228 /* remove host from correct stack */ 214 if (PullHost (host[0].HostID, host[0].stack) == NULL) { 229 XXXX does this step asuume the host is in this stack?? 230 if (PullHostFromStackByID (host[0].stack, host[0].HostID) == NULL) { 215 231 gprint (GP_ERR, "programming error: host is not found in current stack\n"); 216 232 exit (2); … … 218 234 return (host); 219 235 } 220 221 void LinkJobAndHost (Job *job, Host *host) {222 223 job[0].host = (struct Host *) host;224 host[0].job = (struct Job *) job;225 226 /* remove job from correct stack */227 if (PullJob (job[0].JobID, job[0].stack) == NULL) {228 gprint (GP_ERR, "programming error: job is not found in current stack\n");229 exit (2);230 }231 }
Note:
See TracChangeset
for help on using the changeset viewer.
