Changeset 33089 for trunk/psLib/src/sys/psThread.c
- Timestamp:
- Jan 11, 2012, 10:16:48 AM (14 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/sys/psThread.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/sys/psThread.c
r32715 r33089 179 179 PS_ASSERT_THREAD_TASK_NON_NULL(task, false); 180 180 181 // fprintf(stderr, "adding task %s\n", task->type); 182 181 183 if (!tasks) { 182 184 tasks = psHashAlloc(TASK_BUCKETS); … … 189 191 { 190 192 PS_ASSERT_STRING_NON_EMPTY(type, false); 193 // fprintf(stderr, "removing task %s\n", type); 191 194 192 195 return psHashRemove(tasks, type); … … 223 226 224 227 psThreadTask *task = psHashLookup(tasks, job->type); // Task to execute job 228 // fprintf(stderr, "launching job %s\n", job->type); 225 229 #ifdef HAVE_BACKTRACE 226 230 if (!task && bt_buffer) { … … 246 250 "invalid number of arguments to %s (%ld supplied, expected %d)", 247 251 task->type, job->args->n, task->nArgs); 252 // fprintf(stderr, " thread for %s %p launching on %p\n", job->type, task->function, self); 253 254 // Run the job's function 248 255 bool status = task->function(job); // Status of executing task 256 257 // fprintf(stderr, " thread for %s %p finished on %p with status %d\n", job->type, task->function, self, status); 249 258 250 259 // Put the completed job on the 'done' queue … … 306 315 307 316 // call this function after you have added jobs to the queue and 308 bool psThreadPoolWait(bool harvest) 309 { 317 bool psThreadPoolWait(bool harvest, bool harvestOnFailure) 318 { 319 // fprintf(stderr, "psThreadPoolWait called with harvest: %d\n", harvest); 310 320 if (!pool || pool->n == 0) { 311 321 // No threads initialised, so everything's done … … 326 336 #endif 327 337 338 // accumulate the number of faulted jobs that we encounter 339 int numFaults = 0; 328 340 while (1) { 329 341 // check for an error … … 331 343 psThread *thread = pool->data[i]; 332 344 if (thread->fault) { 333 return false;345 numFaults++; 334 346 } 335 347 } … … 354 366 // Nothing in the queue and nothing more to add 355 367 // Ensure everything is harvested, if requested 356 if (harvest ) {368 if (harvest || (numFaults && harvestOnFailure)) { 357 369 psThreadJobHarvest(); 358 370 } 359 371 psThreadUnlock(); 360 return true;372 return numFaults == 0; 361 373 } 362 374
Note:
See TracChangeset
for help on using the changeset viewer.
