IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 7, 2006, 11:18:31 AM (20 years ago)
Author:
Paul Price
Message:

Squashing memory leaks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_rel9_p0/psModules/src/astrom/pmConcepts.c

    r6124 r6342  
    1111#include "psAdditionals.h"
    1212
     13static bool conceptsInitialised = false;// Have concepts been read?
    1314static psMetadata *conceptsFPA = NULL;  // Known concepts for FPA
    1415static psMetadata *conceptsChip = NULL; // Known concepts for chip
     
    2930    psMemSetDeallocator(spec, (psFreeFunc)conceptSpecFree);
    3031
    31     spec->blank = blank;
     32    spec->blank = psMemIncrRefCounter(blank);
    3233    spec->read = read;
    3334    spec->write = write;
     
    4445{
    4546    assert(blank);
    46     pmConceptsInit();
     47    if (!conceptsInitialised) {
     48        pmConceptsInit();
     49    }
    4750
    4851    pmConceptSpec *spec = pmConceptSpecAlloc(blank, read, write); // The concept specification
     
    6669    psMetadataAdd(*target, PS_LIST_TAIL, blank->name, PS_DATA_UNKNOWN | PS_META_REPLACE,
    6770                  "Concepts specification", spec);
     71    psFree(spec);                       // Drop reference
    6872
    6973    return true;
     
    105109                         )
    106110{
    107     pmConceptsInit();
     111    if (!conceptsInitialised) {
     112        pmConceptsInit();
     113    }
    108114    psMetadataIterator *specsIter = psMetadataIteratorAlloc(*specs, PS_LIST_HEAD, NULL); // Iterator on specs
    109115    psMetadataItem *specItem = NULL;    // Item from the specs metadata
    110116    while ((specItem = psMetadataGetAndIncrement(specsIter))) {
     117        psTrace(__func__, 9, "Blanking %s...\n", specItem->name);
    111118        pmConceptSpec *spec = specItem->data.V; // The specification
    112119        psMetadataItem *blank = spec->blank; // The concept
     
    127134                        )
    128135{
    129     pmConceptsInit();
     136    if (!conceptsInitialised) {
     137        pmConceptsInit();
     138    }
    130139    psMetadataIterator *specsIter = psMetadataIteratorAlloc(*specs, PS_LIST_HEAD, NULL); // Iterator on specs
    131140    psMetadataItem *specItem = NULL;    // Item from the specs metadata
     
    157166                         )
    158167{
    159     pmConceptsInit();
     168    if (!conceptsInitialised) {
     169        pmConceptsInit();
     170    }
    160171    if (! fpa->camera) {
    161172        return false;
     
    282293
    283294        // FPA.NAME
    284         pmConceptRegister(psMetadataItemAllocStr("FPA.NAME", "Name of FPA", ""), NULL, NULL,
    285                           PM_CONCEPT_LEVEL_FPA);
     295        {
     296            psMetadataItem *fpaName = psMetadataItemAllocStr("FPA.NAME", "Name of FPA", "");
     297            pmConceptRegister(fpaName, NULL, NULL, PM_CONCEPT_LEVEL_FPA);
     298            psFree(fpaName);
     299        }
    286300
    287301        // FPA.AIRMASS
    288         pmConceptRegister(psMetadataItemAllocF32("FPA.AIRMASS", "Airmass at boresight", 0.0), NULL, NULL,
    289                           PM_CONCEPT_LEVEL_FPA);
     302        {
     303            psMetadataItem *fpaAirmass = psMetadataItemAllocF32("FPA.AIRMASS", "Airmass at boresight", 0.0);
     304            pmConceptRegister(fpaAirmass, NULL, NULL, PM_CONCEPT_LEVEL_FPA);
     305            psFree(fpaAirmass);
     306        }
    290307
    291308        // FPA.FILTER
    292         pmConceptRegister(psMetadataItemAllocStr("FPA.FILTER", "Filter used", ""), NULL, NULL,
    293                           PM_CONCEPT_LEVEL_FPA);
     309        {
     310            psMetadataItem *fpaFilter = psMetadataItemAllocStr("FPA.FILTER", "Filter used", "");
     311            pmConceptRegister(fpaFilter, NULL, NULL, PM_CONCEPT_LEVEL_FPA);
     312            psFree(fpaFilter);
     313        }
    294314
    295315        // FPA.POSANGLE
    296         pmConceptRegister(psMetadataItemAllocF32("FPA.POSANGLE", "Position angle of instrument", 0.0), NULL,
    297                           NULL, PM_CONCEPT_LEVEL_FPA);
     316        {
     317            psMetadataItem *fpaPosangle = psMetadataItemAllocF32("FPA.POSANGLE",
     318                                          "Position angle of instrument", 0.0);
     319            pmConceptRegister(fpaPosangle, NULL, NULL, PM_CONCEPT_LEVEL_FPA);
     320            psFree(fpaPosangle);
     321        }
    298322
    299323        // FPA.RADECSYS
    300         pmConceptRegister(psMetadataItemAllocStr("FPA.RADECSYS", "Celestial coordinate system", ""), NULL,
    301                           NULL, PM_CONCEPT_LEVEL_FPA);
     324        {
     325            psMetadataItem *fpaRadecsys = psMetadataItemAllocStr("FPA.RADECSYS",
     326                                          "Celestial coordinate system", "");
     327            pmConceptRegister(fpaRadecsys, NULL, NULL, PM_CONCEPT_LEVEL_FPA);
     328            psFree(fpaRadecsys);
     329        }
    302330
    303331        // FPA.RA
    304         pmConceptRegister(psMetadataItemAllocF64("FPA.RA", "Right Ascension of boresight", NAN),
    305                           (pmConceptReadFunc)pmConceptRead_FPA_RA, (pmConceptWriteFunc)pmConceptWrite_FPA_RA,
    306                           PM_CONCEPT_LEVEL_FPA);
     332        {
     333            psMetadataItem *fpaRa = psMetadataItemAllocF64("FPA.RA", "Right Ascension of boresight", NAN);
     334            pmConceptRegister(fpaRa, (pmConceptReadFunc)pmConceptRead_FPA_RA,
     335                              (pmConceptWriteFunc)pmConceptWrite_FPA_RA, PM_CONCEPT_LEVEL_FPA);
     336            psFree(fpaRa);
     337        }
    307338
    308339        // FPA.DEC
    309         pmConceptRegister(psMetadataItemAllocF64("FPA.DEC", "Declination of boresight", NAN),
    310                           (pmConceptReadFunc)pmConceptRead_FPA_DEC,
    311                           (pmConceptWriteFunc)pmConceptWrite_FPA_DEC, PM_CONCEPT_LEVEL_FPA);
    312 
     340        {
     341            psMetadataItem *fpaDec = psMetadataItemAllocF64("FPA.DEC", "Declination of boresight", NAN);
     342            pmConceptRegister(fpaDec, (pmConceptReadFunc)pmConceptRead_FPA_DEC,
     343                              (pmConceptWriteFunc)pmConceptWrite_FPA_DEC, PM_CONCEPT_LEVEL_FPA);
     344            psFree(fpaDec);
     345        }
     346
     347        // Done with FPA level concepts
    313348    }
    314349    if (! conceptsChip) {
     
    324359
    325360        // CELL.GAIN
    326         pmConceptRegister(psMetadataItemAllocF32("CELL.GAIN", "CCD gain (e/count)", NAN), NULL, NULL,
    327                           PM_CONCEPT_LEVEL_CELL);
     361        {
     362            psMetadataItem *cellGain = psMetadataItemAllocF32("CELL.GAIN", "CCD gain (e/count)", NAN);
     363            pmConceptRegister(cellGain, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     364            psFree(cellGain);
     365        }
    328366
    329367        // CELL.READNOISE
    330         pmConceptRegister(psMetadataItemAllocF32("CELL.GAIN", "CCD read noise (e)", NAN), NULL, NULL,
    331                           PM_CONCEPT_LEVEL_CELL);
     368        {
     369            psMetadataItem *cellReadnoise = psMetadataItemAllocF32("CELL.READNOISE",
     370                                            "CCD read noise (e)", NAN);
     371            pmConceptRegister(cellReadnoise, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     372            psFree(cellReadnoise);
     373        }
    332374
    333375        // CELL.SATURATION
    334         pmConceptRegister(psMetadataItemAllocF32("CELL.SATURATION", "Saturation level (counts)", NAN), NULL,
    335                           NULL, PM_CONCEPT_LEVEL_CELL);
     376        {
     377            psMetadataItem *cellSaturation = psMetadataItemAllocF32("CELL.SATURATION",
     378                                             "Saturation level (counts)", NAN);
     379            pmConceptRegister(cellSaturation, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     380            psFree(cellSaturation);
     381        }
    336382
    337383        // CELL.BAD
    338         pmConceptRegister(psMetadataItemAllocF32("CELL.BAD", "Bad level (counts)", NAN), NULL, NULL,
    339                           PM_CONCEPT_LEVEL_CELL);
     384        {
     385            psMetadataItem *cellBad = psMetadataItemAllocF32("CELL.BAD", "Bad level (counts)", NAN);
     386            pmConceptRegister(cellBad, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     387            psFree(cellBad);
     388        }
    340389
    341390        // CELL.XPARITY
    342         pmConceptRegister(psMetadataItemAllocS32("CELL.XPARITY",
    343                           "Orientation in x compared to the rest of the FPA", 0),
    344                           NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     391        {
     392            psMetadataItem *cellXparity = psMetadataItemAllocS32("CELL.XPARITY",
     393                                          "Orientation in x compared to the rest of the FPA", 0);
     394            pmConceptRegister(cellXparity, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     395            psFree(cellXparity);
     396        }
    345397
    346398        // CELL.YPARITY
    347         pmConceptRegister(psMetadataItemAllocS32("CELL.YPARITY",
    348                           "Orientation in x compared to the rest of the FPA", 0),
    349                           NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     399        {
     400            psMetadataItem *cellYparity = psMetadataItemAllocS32("CELL.YPARITY",
     401                                          "Orientation in x compared to the rest of the FPA", 0);
     402            pmConceptRegister(cellYparity, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     403            psFree(cellYparity);
     404        }
    350405
    351406        // CELL.READDIR
    352         pmConceptRegister(psMetadataItemAllocS32("CELL.READDIR", "Read direction, rows=1, cols=2", 1), NULL,
    353                           NULL, PM_CONCEPT_LEVEL_CELL);
     407        {
     408            psMetadataItem *cellReaddir = psMetadataItemAllocS32("CELL.READDIR",
     409                                          "Read direction, rows=1, cols=2", 1);
     410            pmConceptRegister(cellReaddir, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     411            psFree(cellReaddir);
     412        }
    354413
    355414
     
    361420
    362421        // CELL.EXPOSURE
    363         pmConceptRegister(psMetadataItemAllocF32("CELL.EXPOSURE", "Exposure time (sec)", NAN), NULL, NULL,
    364                           PM_CONCEPT_LEVEL_CELL);
     422        {
     423            psMetadataItem *cellExposure = psMetadataItemAllocF32("CELL.EXPOSURE",
     424                                           "Exposure time (sec)", NAN);
     425            pmConceptRegister(cellExposure, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     426            psFree(cellExposure);
     427        }
    365428
    366429        // CELL.DARKTIME
    367         pmConceptRegister(psMetadataItemAllocF32("CELL.DARKTIME", "Time since flush (sec)", NAN), NULL, NULL,
    368                           PM_CONCEPT_LEVEL_CELL);
     430        {
     431            psMetadataItem *cellDarktime = psMetadataItemAllocF32("CELL.DARKTIME",
     432                                           "Time since flush (sec)", NAN);
     433            pmConceptRegister(cellDarktime, NULL, NULL, PM_CONCEPT_LEVEL_CELL);
     434            psFree(cellDarktime);
     435        }
    369436
    370437        // CELL.TRIMSEC
     
    372439            psRegion *trimsec = psAlloc(sizeof(psRegion)); // Blank trimsec
    373440            trimsec->x0 = trimsec->y0 = trimsec->x1 = trimsec->y1 = NAN;
    374             pmConceptRegister(psMetadataItemAllocPtr("CELL.TRIMSEC", PS_DATA_UNKNOWN, "Trim section",
    375                               trimsec),
    376                               (pmConceptReadFunc)pmConceptRead_CELL_TRIMSEC,
     441            psMetadataItem *cellTrimsec = psMetadataItemAllocPtr("CELL.TRIMSEC", PS_DATA_UNKNOWN,
     442                                          "Trim section", trimsec);
     443            psFree(trimsec);
     444            pmConceptRegister(cellTrimsec, (pmConceptReadFunc)pmConceptRead_CELL_TRIMSEC,
    377445                              (pmConceptWriteFunc)pmConceptWrite_CELL_TRIMSEC, PM_CONCEPT_LEVEL_CELL);
    378             psFree(trimsec);
     446            psFree(cellTrimsec);
    379447        }
    380448
     
    382450        {
    383451            psList *biassecs = psListAlloc(NULL); // Blank biassecs
    384             pmConceptRegister(psMetadataItemAllocPtr("CELL.BIASSEC", PS_DATA_LIST, "Bias sections", biassecs),
    385                               (pmConceptReadFunc)pmConceptRead_CELL_BIASSEC,
    386                               (pmConceptWriteFunc)pmConceptWrite_CELL_TRIMSEC, PM_CONCEPT_LEVEL_CELL);
     452            psMetadataItem *cellBiassec = psMetadataItemAllocPtr("CELL.BIASSEC", PS_DATA_LIST,
     453                                          "Bias sections", biassecs);
    387454            psFree(biassecs);
     455            pmConceptRegister(cellBiassec, (pmConceptReadFunc)pmConceptRead_CELL_BIASSEC,
     456                              (pmConceptWriteFunc)pmConceptWrite_CELL_BIASSEC, PM_CONCEPT_LEVEL_CELL);
     457            psFree(cellBiassec);
    388458        }
    389459
    390460        // CELL.XBIN
    391         pmConceptRegister(psMetadataItemAllocS32("CELL.XBIN", "Binning in x", 0),
    392                           (pmConceptReadFunc)pmConceptRead_CELL_XBIN,
    393                           (pmConceptWriteFunc)pmConceptWrite_CELL_XBIN, PM_CONCEPT_LEVEL_CELL);
     461        {
     462            psMetadataItem *cellXbin = psMetadataItemAllocS32("CELL.XBIN", "Binning in x", 0);
     463            pmConceptRegister(cellXbin, (pmConceptReadFunc)pmConceptRead_CELL_XBIN,
     464                              (pmConceptWriteFunc)pmConceptWrite_CELL_XBIN, PM_CONCEPT_LEVEL_CELL);
     465            psFree(cellXbin);
     466        }
    394467
    395468        // CELL.YBIN
    396         pmConceptRegister(psMetadataItemAllocS32("CELL.YBIN", "Binning in y", 0),
    397                           (pmConceptReadFunc)pmConceptRead_CELL_YBIN,
    398                           (pmConceptWriteFunc)pmConceptWrite_CELL_YBIN, PM_CONCEPT_LEVEL_CELL);
     469        {
     470            psMetadataItem *cellYbin = psMetadataItemAllocS32("CELL.YBIN", "Binning in y", 0);
     471            pmConceptRegister(cellYbin, (pmConceptReadFunc)pmConceptRead_CELL_YBIN,
     472                              (pmConceptWriteFunc)pmConceptWrite_CELL_YBIN, PM_CONCEPT_LEVEL_CELL);
     473            psFree(cellYbin);
     474        }
    399475
    400476        // CELL.TIMESYS
    401         pmConceptRegister(psMetadataItemAllocS32("CELL.TIMESYS", "Time system", -1),
    402                           (pmConceptReadFunc)pmConceptRead_CELL_TIMESYS,
    403                           (pmConceptWriteFunc)pmConceptWrite_CELL_TIMESYS, PM_CONCEPT_LEVEL_CELL);
     477        {
     478            psMetadataItem *cellTimesys = psMetadataItemAllocS32("CELL.TIMESYS", "Time system", -1);
     479            pmConceptRegister(cellTimesys, (pmConceptReadFunc)pmConceptRead_CELL_TIMESYS,
     480                              (pmConceptWriteFunc)pmConceptWrite_CELL_TIMESYS, PM_CONCEPT_LEVEL_CELL);
     481            psFree(cellTimesys);
     482        }
    404483
    405484        // CELL.TIME
     
    409488            time->sec = 0;
    410489            time->nsec = 0;
    411             pmConceptRegister(psMetadataItemAlloc("CELL.TIME", PS_DATA_TIME, "Time of exposure", time),
    412                               (pmConceptReadFunc)pmConceptRead_CELL_TIME,
     490            psMetadataItem *cellTime = psMetadataItemAlloc("CELL.TIME", PS_DATA_TIME,
     491                                       "Time of exposure", time);
     492            psFree(time);
     493            pmConceptRegister(cellTime, (pmConceptReadFunc)pmConceptRead_CELL_TIME,
    413494                              (pmConceptWriteFunc)pmConceptWrite_CELL_TIME, PM_CONCEPT_LEVEL_CELL);
    414             psFree(time);
     495            psFree(cellTime);
    415496        }
    416497
    417498        // CELL.X0
    418         pmConceptRegister(psMetadataItemAllocS32("CELL.X0", "Position of (0,0) on the chip", 0),
    419                           (pmConceptReadFunc)pmConceptRead_CELL_X0,
    420                           (pmConceptWriteFunc)pmConceptWrite_CELL_X0, PM_CONCEPT_LEVEL_CELL);
     499        {
     500            psMetadataItem *cellX0 = psMetadataItemAllocS32("CELL.X0", "Position of (0,0) on the chip", 0);
     501            pmConceptRegister(cellX0, (pmConceptReadFunc)pmConceptRead_CELL_X0,
     502                              (pmConceptWriteFunc)pmConceptWrite_CELL_X0, PM_CONCEPT_LEVEL_CELL);
     503            psFree(cellX0);
     504        }
    421505
    422506        // CELL.Y0
    423         pmConceptRegister(psMetadataItemAllocS32("CELL.Y0", "Position of (0,0) on the chip", 0),
    424                           (pmConceptReadFunc)pmConceptRead_CELL_Y0,
    425                           (pmConceptWriteFunc)pmConceptWrite_CELL_Y0, PM_CONCEPT_LEVEL_CELL);
    426 
    427     }
     507        {
     508            psMetadataItem *cellY0 = psMetadataItemAllocS32("CELL.Y0", "Position of (0,0) on the chip", 0);
     509            pmConceptRegister(cellY0, (pmConceptReadFunc)pmConceptRead_CELL_Y0,
     510                              (pmConceptWriteFunc)pmConceptWrite_CELL_Y0, PM_CONCEPT_LEVEL_CELL);
     511            psFree(cellY0);
     512        }
     513
     514    }
     515
     516    conceptsInitialised = true;
    428517
    429518    return init;
Note: See TracChangeset for help on using the changeset viewer.