tenFiberContext * tenFiberContextNix(tenFiberContext *tfx) { if (tfx) { tfx->ksp = nrrdKernelSpecNix(tfx->ksp); tfx->gtx = gageContextNix(tfx->gtx); free(tfx); } return NULL; }
pullVolume * pullVolumeNix(pullVolume *vol) { if (vol) { vol->name = airFree(vol->name); vol->ksp00 = nrrdKernelSpecNix(vol->ksp00); vol->ksp11 = nrrdKernelSpecNix(vol->ksp11); vol->ksp22 = nrrdKernelSpecNix(vol->ksp22); vol->kspSS = nrrdKernelSpecNix(vol->kspSS); vol->gctx = gageContextNix(vol->gctx); airFree(vol); } return NULL; }
/* ** this is called *after* pushOutputGet ** ** should nix everything created by the many _push*Setup() functions */ int pushFinish(pushContext *pctx) { char me[]="pushFinish", err[BIFF_STRLEN]; unsigned int ii, tidx; if (!pctx) { sprintf(err, "%s: got NULL pointer", me); biffAdd(PUSH, err); return 1; } if (pctx->verbose > 1) { fprintf(stderr, "%s: finishing workers\n", me); } pctx->finished = AIR_TRUE; if (pctx->numThread > 1) { airThreadBarrierWait(pctx->stageBarrierA); } for (tidx=pctx->numThread; tidx>0; tidx--) { if (tidx-1) { airThreadJoin(pctx->task[tidx-1]->thread, &(pctx->task[tidx-1]->returnPtr)); } pctx->task[tidx-1]->thread = airThreadNix(pctx->task[tidx-1]->thread); pctx->task[tidx-1] = _pushTaskNix(pctx->task[tidx-1]); } pctx->task = (pushTask **)airFree(pctx->task); pctx->nten = nrrdNuke(pctx->nten); pctx->ninv = nrrdNuke(pctx->ninv); pctx->nmask = nrrdNuke(pctx->nmask); pctx->gctx = gageContextNix(pctx->gctx); pctx->fctx = tenFiberContextNix(pctx->fctx); for (ii=0; ii<pctx->numBin; ii++) { pushBinDone(pctx->bin + ii); } pctx->bin = (pushBin *)airFree(pctx->bin); pctx->binsEdge = pctx->numBin = 0; if (pctx->numThread > 1) { pctx->binMutex = airThreadMutexNix(pctx->binMutex); pctx->stageBarrierA = airThreadBarrierNix(pctx->stageBarrierA); pctx->stageBarrierB = airThreadBarrierNix(pctx->stageBarrierB); } return 0; }