IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 21438


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

plug memory leaks

Location:
trunk/magic/remove/src
Files:
3 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{
  • trunk/magic/remove/src/streaksio.h

    r21156 r21438  
    77    psString outputFilename, bool required);
    88
    9 void sFileFree(sFile *);
     9void closeImages(streakFiles *sfiles);
    1010
    11 void closeImages(streakFiles *sfiles);
    1211void closeImage(sFile *sfile);
    1312
     
    2726bool isExciseValue(double, double);
    2827void setMaskedToNAN(streakFiles *sfiles, psU8 maskMask, bool printCounts);
     28
     29bool swapOutputsToInputs(streakFiles *sf);
    2930#endif // STREAKS_IO_H
  • trunk/magic/remove/src/warpedpixels.c

    r21156 r21438  
    2222    int n = psArrayLength(skycells);
    2323
    24     psRegion     bounds = *pmChipPixels(sf->chip);
     24    psRegion     *bounds = pmChipPixels(sf->chip);
    2525   
    26     int width  = bounds.x1 - bounds.x0;
    27     int height = bounds.y1 - bounds.y0;
     26    int width  = bounds->x1 - bounds->x0;
     27    int height = bounds->y1 - bounds->y0;
     28
     29    psFree(bounds);
    2830
    2931    sf->warpedPixels = psImageAlloc(width, height, PS_TYPE_U8);
     
    3537
    3638        addTouchedPixels(sf, resolved_name);
     39        psFree(resolved_name);
    3740    }
    3841
     
    4851        psFitsWriteImage(fits, header, sf->warpedPixels, 0, NULL);
    4952        psFitsClose(fits);
     53        psFree(header);
    5054    }
    5155    return true;
     
    6266    }
    6367    psMetadata *header = psFitsReadHeader(NULL, fits);
     68    psFitsClose(fits);
    6469    if (!header) {
    6570        psError(PS_ERR_IO, false, "failed to read fixts header from skycell file: %s", fileName);
     
    7580    int naxis2 = psMetadataLookupS32(NULL, header, "NAXIS2");
    7681
     82    psFree(header);
     83
    7784    /* now set up our wrapper to the chip astrometry to apply to the whole chip */
    7885    sf->astrom = streakSetAstrometry(sf->astrom, sf->stage, sf->inAstrom->fpa, sf->chip, false, NULL,
     
    111118        pt[i].y = p.y;
    112119    }
     120
     121    psFree(wcs);
    113122
    114123    // put the corners in the desired order (see comments below)
Note: See TracChangeset for help on using the changeset viewer.