IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 16991


Ignore:
Timestamp:
Mar 13, 2008, 5:25:47 PM (18 years ago)
Author:
Paul Price
Message:

Plugging memory leaks. Now there's none left!

Location:
trunk/ppStack/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppStack/src/ppStack.h

    r16986 r16991  
    2323pmPSF *ppStackPSF(const pmConfig *config, // Configuration
    2424                  int numCols, int numRows, // Size of image
    25                   const psList *list    // List of input PSFs
     25                  const psArray *psfs   // List of input PSFs
    2626    );
    2727
  • trunk/ppStack/src/ppStackLoop.c

    r16986 r16991  
    4747}
    4848
    49 // Activate/deactivate a single element for a list; return array of files
    50 static psArray *fileActivationSingle(pmConfig *config, // Configuration
    51                                      char **files, // Files to turn on/off
    52                                      bool state,   // Activation state
    53                                      int num // Number of file in sequence
    54                                      )
     49// Activate/deactivate a single element for a list
     50static void fileActivationSingle(pmConfig *config, // Configuration
     51                                 char **files, // Files to turn on/off
     52                                 bool state,   // Activation state
     53                                 int num // Number of file in sequence
     54                                 )
    5555{
    5656    assert(config);
    5757    assert(files);
    5858
    59     psList *list = psListAlloc(NULL);   // List of files
    60 
    6159    for (int i = 0; files[i] != NULL; i++) {
    62         pmFPAfile *file = pmFPAfileActivateSingle(config->files, state, files[i], num); // Activated file
    63         psListAdd(list, PS_LIST_TAIL, file);
    64     }
    65 
    66     psArray *array = psListToArray(list);
    67     psFree(list);
    68 
    69     return array;
     60        pmFPAfileActivateSingle(config->files, state, files[i], num); // Activated file
     61    }
     62    return;
    7063}
    7164
     
    241234                                                               "^PPSTACK.INPUT$"); // Iterator
    242235        psMetadataItem *fileItem; // Item from iteration
    243         psList *psfList = psListAlloc(NULL); // List of PSFs for PSF envelope
     236        psArray *psfs = psArrayAlloc(num); // PSFs for PSF envelope
    244237        int numCols = 0, numRows = 0;   // Size of image
     238        int index = 0;                  // Index for file
    245239        while ((fileItem = psMetadataGetAndIncrement(fileIter))) {
    246240            assert(fileItem->type == PS_DATA_UNKNOWN);
     
    253247                psFree(sources);
    254248                psFree(fileIter);
    255                 psFree(psfList);
     249                psFree(psfs);
    256250                return false;
    257251            }
    258             psListAdd(psfList, PS_LIST_TAIL, psf);
     252            psfs->data[index++] = psMemIncrRefCounter(psf);
     253            psMetadataRemoveKey(chip->analysis, "PSPHOT.PSF");
    259254
    260255            pmCell *cell = pmFPAviewThisCell(view, inputFile->fpa); // Cell of interest
     
    268263                psFree(sources);
    269264                psFree(fileIter);
    270                 psFree(psfList);
     265                psFree(psfs);
    271266                return false;
    272267            }
     
    279274        psFree(view);
    280275
    281         targetPSF = ppStackPSF(config, numCols, numRows, psfList);
    282         psFree(psfList);
     276        targetPSF = ppStackPSF(config, numCols, numRows, psfs);
     277        psFree(psfs);
    283278        if (!targetPSF) {
    284279            psError(PS_ERR_UNKNOWN, false, "Unable to determine output PSF.");
     
    313308        psTrace("ppStack", 2, "Convolving input %d of %d to target PSF....\n", i, num);
    314309        pmFPAfileActivate(config->files, false, NULL);
    315         psArray *files = fileActivationSingle(config, convolveFiles, true, i);
     310        fileActivationSingle(config, convolveFiles, true, i);
     311        pmFPAfile *file = pmFPAfileSelectSingle(config->files, "PPSTACK.INPUT", i); // File of interest
    316312        pmFPAview *view = filesIterateDown(config);
    317313        if (!view) {
     
    321317        }
    322318
    323         pmReadout *readout = pmFPAviewThisReadout(view, ((pmFPAfile*)files->data[0])->fpa); // Input readout
     319        pmReadout *readout = pmFPAviewThisReadout(view, file->fpa); // Input readout
    324320        psFree(view);
    325321
     
    372368        psArray *readouts = psArrayAlloc(num); // Readouts for convolved images
    373369        for (int i = 0; i < num; i++) {
    374             readouts->data[i] = pmReadoutAlloc(cells->data[i]); // Readout into which to read
     370            pmCell *cell = cells->data[i]; // Cell of interest
     371            pmReadout *ro = cell->readouts->data[0]; // Readout of interest
     372            if (!ro) {
     373                ro = pmReadoutAlloc(cell);
     374            }
     375            readouts->data[i] = ro; // Readout into which to read
    375376        }
    376377        psFree(cells);
     
    394395                psError(PS_ERR_UNKNOWN, false, "Unable to open convolved files %s, %s, %s",
    395396                        (char*)imageNames->data[i], (char*)maskNames->data[i], (char*)weightNames->data[i]);
    396                 psFree(cells);
    397397                psFree(subKernels);
    398398                psFree(subRegions);
     
    471471            psPixels *reject = pmStackReject(inspect, NULL, threshold, subRegions->data[i],
    472472                                             subKernels->data[i]); // Pixels to reject
     473            psFree(inspect);
    473474            psTrace("ppStack", 5, "%ld pixels rejected from image %d", reject->n, i);
    474475            rejected->data[i] = reject;
     
    525526
    526527        psFree(rejected);
     528        for (int i = 0; i < readouts->n; i++) {
     529            pmReadout *ro = readouts->data[i]; // Readout of interest
     530            pmReadoutFreeData(ro);
     531        }
    527532        psFree(readouts);
    528533
  • trunk/ppStack/src/ppStackPSF.c

    r16605 r16991  
    99#include "ppStack.h"
    1010
    11 pmPSF *ppStackPSF(const pmConfig *config, int numCols, int numRows, const psList *list)
     11pmPSF *ppStackPSF(const pmConfig *config, int numCols, int numRows, const psArray *psfs)
    1212{
    1313    // Get the recipe values
     
    1818
    1919    // Solve for the target PSF
    20     psArray *array = psListToArray(list); // Array of PSFs
    21     pmPSF *psf = pmPSFEnvelope(numCols, numRows, array, psfInstances, psfRadius, psfModel,
     20    pmPSF *psf = pmPSFEnvelope(numCols, numRows, psfs, psfInstances, psfRadius, psfModel,
    2221                               psfOrder, psfOrder);
    23     psFree(array);
    2422    if (!psf) {
    2523        psError(PS_ERR_UNKNOWN, false, "Unable to determine output PSF.");
Note: See TracChangeset for help on using the changeset viewer.