void update_aggr_stat(uperf_shm_t *shm) { int i; AGG_STAT(shm)->size = 0; AGG_STAT(shm)->count = 0; for (i = 0; i < shm->no_strands; i++) { newstats_t *ns = STRAND_STAT(shm_get_strand(shm, i)); AGG_STAT(shm)->size += ns->size; AGG_STAT(shm)->count += ns->count; } }
static int spawn_strands_group(uperf_shm_t *shm, group_t *gp, int id) { int j; int rc; strand_t *s; for (j = 0; j < gp->nthreads; j++) { s = shm_get_strand(shm, id + j); s->worklist = group_clone(gp); s->shmptr = shm; s->role = MASTER; (void) group_assign_stat(shm, s->worklist, id + j); if (STRAND_IS_PROCESS(gp)) { s->strand_flag |= STRAND_TYPE_PROCESS; rc = fork(); if (rc == 0) { (void) strand_run(s); exit(0); } else if (rc > 0) { s->pid = rc; } else { perror("fork"); uperf_error("fork failed"); return (1); } } else { s->strand_flag |= STRAND_TYPE_THREAD; rc = pthread_create(&(s->tid), NULL, &strand_run, (void *) s); if (rc) { perror("pthread_create"); uperf_error("pthread_create failed"); return (1); } } } return (0); }