IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 10, 2009, 11:33:02 AM (17 years ago)
Author:
bills
Message:

plug memory leaks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/magic/remove/src/streaksio.c

    r21156 r21438  
    22#include "libgen.h"
    33#include "unistd.h"
     4
     5static void sFileFree(sFile *sfile);
     6static void streakFilesFree(streakFiles *sf);
     7static void freeImages(streakFiles *);
    48
    59static nebServer *ourNebServer = NULL;
     
    1216    bool status;
    1317    streakFiles *sf = psAlloc(sizeof(streakFiles));
     18    psMemSetDeallocator(sf, (psFreeFunc) streakFilesFree);
    1419    memset(sf, 0, sizeof(*sf));
    1520
     
    96101}
    97102
    98 void sFileFree(sFile *sfile)
    99 {
    100     psFree(sfile->resolved_name);
    101     psFree(sfile->name);
    102     psFree(sfile);
     103static void
     104streakFilesFree(streakFiles *sf)
     105{
     106    freeImages(sf);
     107    psFree(sf->warpedPixels);
     108    psFree(sf->tiles);
     109    psFree(sf->view);
     110    psFree(sf->astrom);
    103111}
    104112
     
    232240    psString name = psMetadataLookupStr(&status, config->arguments, fileSelect);
    233241    if (!status || !name) {
     242        sFileFree(sfile);
    234243        if (required) {
    235244            psError(PS_ERR_IO, false, "Failed to lookup name for %s", fileSelect);
    236             sFileFree(sfile);
    237245            streaksExit("", 1);
    238246        }
     
    707715
    708716void
     717sFileFree(sFile *sfile)
     718{
     719    if (!sfile) {
     720        return;
     721    }
     722    psFree(sfile->name);
     723    psFree(sfile->resolved_name);
     724    psFree(sfile);
     725}
     726
     727void
    709728closeImage(sFile *sfile)
    710729{
     
    718737    }
    719738    psFree(sfile->header);
     739    sfile->header = NULL;
    720740    psFree(sfile->image);
     741    sfile->header = NULL;
    721742    psFree(sfile->imagecube);
    722     psFree(sfile->name);
    723     psFree(sfile->resolved_name);
    724     psFree(sfile);
     743    sfile->header = NULL;
    725744}
    726745
     
    745764        closeImage(sf->outWeight);
    746765        closeImage(sf->recWeight);
     766    }
     767}
     768
     769static void
     770freeImages(streakFiles *sf)
     771{
     772    sFileFree(sf->inImage);
     773    sFileFree(sf->outImage);
     774    sFileFree(sf->recImage);
     775    if (sf->inMask) {
     776        sFileFree(sf->inMask);
     777        sFileFree(sf->outMask);
     778        sFileFree(sf->recMask);
     779    }
     780    if (sf->inChMask) {
     781        sFileFree(sf->inChMask);
     782        sFileFree(sf->outChMask);
     783        sFileFree(sf->recChMask);
     784    }
     785    if (sf->inWeight) {
     786        sFileFree(sf->inWeight);
     787        sFileFree(sf->outWeight);
     788        sFileFree(sf->recWeight);
    747789    }
    748790}
     
    845887    return true;
    846888}
    847 static bool
     889
     890bool
    848891swapOutputsToInputs(streakFiles *sfiles)
    849892{
    850     if (sfiles->inMask) {
     893    if (sfiles->outMask) {
    851894        if (!swapOutputToInput(sfiles->inMask, sfiles->outMask)) {
    852895            psError(PM_ERR_SYS, false, "failed to swap instances for Mask.");
     
    855898    }
    856899
    857     if (sfiles->inWeight) {
     900    if (sfiles->outWeight) {
    858901        if (!swapOutputToInput(sfiles->inWeight, sfiles->outWeight)) {
    859902            psError(PM_ERR_SYS, false, "failed to swap instances for Weight.");
     
    891934}
    892935
    893 static bool
     936bool
    894937deleteTemps(streakFiles *sfiles)
    895938{
Note: See TracChangeset for help on using the changeset viewer.