Changeset 9275a3 for pcp


Ignore:
Timestamp:
Apr 21, 2008, 2:19:23 PM (17 years ago)
Author:
Frederik Heber <heber@…>
Children:
32de28
Parents:
907086e
git-author:
Frederik Heber <heber@…> (04/18/08 14:50:42)
git-committer:
Frederik Heber <heber@…> (04/21/08 14:19:23)
Message:

Free(): now takes a debug string to know where free error occured
debug(): now depends on HAVE_DEBUG

Location:
pcp/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pcp/src/helpers.c

    r907086e r9275a3  
    4747 * \param output output string
    4848 */
    49 void debug(struct Problem *P, const char *output) {
    50   if (output) fprintf(stderr,"(%i) %s\n",P->Par.me, output);
    51 }
     49#ifdef HAVE_DEBUG
     50void debug_in(struct Problem *P, const char *output, const char *file, const int line) {
     51  if (output) fprintf(stderr,"(%i) DEBUG: in %s at line %i: %s\n",P->Par.me, file, line, output);
     52}
     53#else
     54void debug_in(struct Problem *P, const char *output, const char *file, const int line) {}  // print nothing
     55#endif
    5256
    5357/** Malloc with error check.
     
    169173 * Wrapper for free(), free is only called on given non-null pointer
    170174 * \param *ptr pointer to allocated memory region
    171  */
    172 void Free (void *ptr) {
    173   if (ptr) free(ptr);
    174   else fprintf(stderr,"Free failure\n");
     175 * \param *output message to print on failure
     176 */
     177void Free (void *ptr, const char* output) {
     178  if (ptr != NULL)
     179    free(ptr);
     180  else
     181    fprintf(stderr,"Free not necessary: %s\n", output);
    175182}
    176183
     
    301308  int i,d, type;
    302309  if (P->Call.out[NormalOut]) fprintf(stderr,"(%i)RemoveEverything !\n",P->Par.me);
    303   //debug(P,"RemoveGradients"); 
    304310  RemoveGradients(P, &P->Grad);
    305   //debug(P,"RemovePseudoRead"); 
    306311  RemovePseudoRead(P);
    307   //debug(P,"RemoveIonsRead"); 
    308312  RemoveIonsRead(&P->Ion);
    309   //debug(P,"fft_3d_destroy_plan"); 
    310313  fft_3d_destroy_plan(P,P->Lat.plan);
    311   //debug(P,"P->Files.PosTemp"); 
    312314  if (P->Files.MeOutVis) {
    313     Free(P->Files.PosTemp);
    314   }
    315   //debug(P,"P->Files.OutputPosType"); 
    316   if (P->Files.MeOutVis)
    317     Free(P->Files.OutputPosType);
    318   //debug(P,"mainname"); 
    319   Free(P->Files.mainname);
    320   //debug(P,"mainpath"); 
    321   Free(P->Files.mainpath);
    322   //debug(P,"MainParameterFile"); 
    323   Free(P->Call.MainParameterFile);
    324   //debug(P,"MaxNoOfnFields"); 
    325   Free(Lat->MaxNoOfnFields);
     315    Free(P->Files.PosTemp, "RemoveEverything: P->Files.PosTemp");
     316    Free(P->Files.OutputPosType, "RemoveEverything: P->Files.OutputPosType");
     317    //Free(P->Files.OutVisStep, "RemoveEverything: P->Files.OutVisStep");
     318  }
     319  Free(P->Files.mainname, "RemoveEverything: P->Files.mainname");
     320  Free(P->Files.mainpath, "RemoveEverything: P->Files.mainpath");
     321  Free(P->Call.MainParameterFile, "RemoveEverything: P->Call.MainParameterFile");
     322        if (P->Call.ForcesFile != NULL)
     323                Free(P->Call.ForcesFile, "RemoveEverything: P->Call.ForcesFile");
     324  Free(Lat->MaxNoOfnFields, "RemoveEverything: Lat->MaxNoOfnFields");
    326325  for (i=0; i < P->Lat.MaxLevel; i++) {
    327     //debug(P,"AllMaxG"); 
    328     Free(Lat->Lev[i].AllMaxG);
    329     //debug(P,"NFields"); 
    330     Free(Lat->NFields[i]);
    331     //debug(P,"GArray"); 
    332     Free(Lat->Lev[i].GArray);
    333     //debug(P,"HashG"); 
    334     Free(Lat->Lev[i].HashG);
    335     //debug(P,"DoubleG"); 
     326    Free(Lat->Lev[i].AllMaxG, "RemoveEverything: Lat->Lev[i].AllMaxG");
     327    Free(Lat->NFields[i], "RemoveEverything: Lat->NFields");
     328    Free(Lat->Lev[i].GArray, "RemoveEverything: Lat->Lev[i].GArray");
     329    Free(Lat->Lev[i].HashG, "RemoveEverything: Lat->Lev[i].HashG");
    336330    if (Lat->Lev[i].MaxDoubleG)
    337       Free(Lat->Lev[i].DoubleG);
     331      Free(Lat->Lev[i].DoubleG, "RemoveEverything: Lat->Lev[i].DoubleG");
    338332    if (i != 0) {
    339       Free(Lat->Lev[i].PosFactorUp);
     333      Free(Lat->Lev[i].PosFactorUp, "RemoveEverything: Lat->Lev[i].PosFactorUp");
    340334    } else {
    341335      for (d=0; d < (P->R.DoPerturbation == 1 ? MaxDensityTypes : MaxInitDensityTypes); d++) {
    342         //debug(P,"DensityArray"); 
    343         if (Lat->Lev[i].Dens->DensityArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityArray[d]);
    344         //debug(P,"DensityCArray"); 
    345         if (Lat->Lev[i].Dens->DensityCArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityCArray[d]);
     336        if (Lat->Lev[i].Dens->DensityArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityArray[d], "RemoveEverything: Lat->Lev[i].Dens->DensityArray[d]");
     337        if (Lat->Lev[i].Dens->DensityCArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityCArray[d], "RemoveEverything: Lat->Lev[i].Dens->DensityCArray[d]");
    346338      }
    347339    }
    348340    /* if (i != Lat->MaxLevel-1) */
    349       //debug(P,"Lat->Lev[i].Dens"); 
    350       Free(Lat->Lev[i].Dens);
     341      Free(Lat->Lev[i].Dens, "RemoveEverything: Lat->Lev[i].Dens");
    351342  }
    352343  for (i=1; i < Lat->MaxLevel; i++) {
    353     Free(Lat->Lev[i].LPsi->LocalPsi);
    354     //debug(P,"LocalPsi"); 
    355     Free(Lat->Lev[i].LPsi->OldLocalPsi);
    356     //debug(P,"OldLocalPsi"); 
     344    Free(Lat->Lev[i].LPsi->LocalPsi, "RemoveEverything: Lat->Lev[i].LPsi->LocalPsi");
     345    Free(Lat->Lev[i].LPsi->OldLocalPsi, "RemoveEverything: Lat->Lev[i].LPsi->OldLocalPsi");
    357346    if (i == 1) {
    358       Free(Lat->Lev[i].LPsi->PsiDat);
    359       //debug(P,"OldLocalPsi"); 
    360       Free(Lat->Lev[i].LPsi->OldPsiDat);
    361       //debug(P,"OldPsiDat"); 
     347      Free(Lat->Lev[i].LPsi->PsiDat, "RemoveEverything: Lat->Lev[i].LPsi->PsiDat");
     348      Free(Lat->Lev[i].LPsi->OldPsiDat, "RemoveEverything: Lat->Lev[i].LPsi->OldPsiDat");
    362349    }
    363     Free(Lat->Lev[i].LPsi);
    364     //debug(P,"LPsi"); 
     350    Free(Lat->Lev[i].LPsi, "RemoveEverything: Lat->Lev[i].LPsi");
    365351  }
    366352  for (i=0;i<Lat->Psi.NoOfTotalPsis;i++) {
    367     Free(Psi->lambda[i]);
    368     //debug(P,"lambda");
     353    Free(Psi->lambda[i], "RemoveEverything: Psi->lambda[i]");
    369354  } 
    370355  for (i=0;i<Lat->Psi.NoOfPsis;i++) {
    371     Free(Psi->Overlap[i]);
    372     //debug(P,"Overlap"); 
    373   }
    374   Free(Psi->lambda);
    375   //debug(P,"lambda"); 
    376   Free(Psi->Overlap);
    377   //debug(P,"Overlap"); 
    378   Free(Psi->AllPsiStatus);
    379   //debug(P,"AllPsiStatus"); 
    380   Free(Psi->AllPsiStatusForSort);
    381   //debug(P,"AllPsiStatusForSort"); 
    382   Free(Psi->LocalPsiStatus);
    383   //debug(P,"LocalPsiStatus"); 
    384   Free(Psi->AllLocalNo);
    385   //debug(P,"AllLocalNo"); 
    386   Free(Psi->RealAllLocalNo);
    387   //debug(P,"RealAllLocalNo"); 
    388   Free(Psi->TempSendA);
    389   //debug(P,"TempSendA"); 
    390   Free(Psi->AddData);
    391   //debug(P,"AddData"); 
    392   Free(Psi->AllActualLocalPsiNo);
    393   //debug(P,"AllActualLocalPsiNo"); 
    394   Free(Psi->AllOldActualLocalPsiNo);
    395   //debug(P,"AllOldActualLocalPsiNo"); 
    396   Free(Lat->Lev);
    397   //debug(P,"Lev"); 
    398   Free(Lat->LevelSizes);
    399   //debug(P,"LevelSizes"); 
    400   Free(Lat->NFields);
    401   //debug(P,"NFields"); 
     356    Free(Psi->Overlap[i], "RemoveEverything: Psi->Overlap[i]");
     357  }
     358  Free(Psi->lambda, "RemoveEverything: Psi->lambda");
     359  Free(Psi->Overlap, "RemoveEverything: Psi->Overlap");
     360  Free(Psi->AllPsiStatus, "RemoveEverything: Psi->AllPsiStatus");
     361  Free(Psi->AllPsiStatusForSort, "RemoveEverything: Psi->AllPsiStatusForSort");
     362  Free(Psi->LocalPsiStatus, "RemoveEverything: Psi->LocalPsiStatus");
     363  Free(Psi->AllLocalNo, "RemoveEverything: Psi->AllLocalNo");
     364  Free(Psi->RealAllLocalNo, "RemoveEverything: Psi->RealAllLocalNo");
     365  Free(Psi->TempSendA, "RemoveEverything: Psi->TempSendA");
     366  Free(Psi->AddData, "RemoveEverything: Psi->AddData");
     367  Free(Psi->AllActualLocalPsiNo, "RemoveEverything: Psi->AllActualLocalPsiNo");
     368  Free(Psi->AllOldActualLocalPsiNo, "RemoveEverything: Psi->AllOldActualLocalPsiNo");
     369  Free(Lat->Lev, "RemoveEverything: Lat->Lev");
     370  Free(Lat->LevelSizes, "RemoveEverything: Lat->LevelSizes");
     371  Free(Lat->NFields, "RemoveEverything: Lat->NFields");
    402372  if (Lat->RT.Use == UseRT) {
    403     Free(Lat->RT.Coeff);
    404     Free(Lat->RT.RTLaplaceS);
    405     Free(Lat->RT.RTLaplace0);
    406     for (i=0; i< MAXRTPOSFAC; i++) Free(Lat->RT.PosFactor[i]);
     373    Free(Lat->RT.Coeff, "RemoveEverything: Lat->RT.Coeff");
     374    Free(Lat->RT.RTLaplaceS, "RemoveEverything: Lat->RT.RTLaplaceS");
     375    Free(Lat->RT.RTLaplace0, "RemoveEverything: Lat->RT.RTLaplace0");
     376    for (i=0; i< MAXRTPOSFAC; i++) Free(Lat->RT.PosFactor[i], "RemoveEverything: Lat->RT.PosFactor[i]");
    407377    for (i=0; i< MAXRTARRAYS; i++) {
    408       Free(Lat->RT.DensityC[i]);
     378      Free(Lat->RT.DensityC[i], "RemoveEverything: Lat->RT.DensityC[i]");
    409379    }
    410     Free(Lat->RT.TempC);
     380    Free(Lat->RT.TempC, "RemoveEverything: Lat->RT.TempC");
    411381  }
    412382  for (type=Occupied;type<Extra;type++)
    413383    for (i=0; i<MAXALLPSIENERGY; i++) {
    414       Free(Lat->Energy[type].PsiEnergy[i]);
     384      Free(Lat->Energy[type].PsiEnergy[i], "RemoveEverything: Lat->Energy[type].PsiEnergy[i]");
    415385    }
    416386  for (i=Occupied;i<Extra;i++)
    417     Free(P->R.MinimisationName[i]);
    418   Free(P->R.MinimisationName);
    419   //debug(P,"PsiEnergy"); 
     387    Free(P->R.MinimisationName[i], "RemoveEverything: P->R.MinimisationName[i]");
     388  Free(P->R.MinimisationName, "RemoveEverything: P->R.MinimisationName");
    420389  MPI_Comm_free(&P->Par.comm_ST_PsiT);
    421390  //debug(P,"comm_ST_PsiT"); 
     
    427396  MPI_Comm_free(&P->Par.comm);
    428397  //debug(P,"comm"); 
    429   Free(P);
     398  Free(P, "RemoveEverything: P");
    430399  FreeMPI_OnePsiElement();
     400  //debug(P,"OnePsiElement"); 
    431401 
    432402  // Free string names from Files structure
    433   Free(P->Files.filename);
    434   Free(P->Files.default_path);
    435   Free(P->Files.pseudopot_path);
     403  Free(P->Files.filename, "RemoveEverything: P->Files.filename");
     404  Free(P->Files.default_path, "RemoveEverything: P->Files.default_path");
     405  Free(P->Files.pseudopot_path, "RemoveEverything: P->Files.pseudopot_path");
    436406}
    437407
  • pcp/src/helpers.h

    r907086e r9275a3  
    1717#include<stddef.h> /* fuer size_t */
    1818
    19 void debug(struct Problem *P, const char *output);
     19// taken out of TREMOLO
     20/*@-namechecks@*/
     21#ifndef __GNUC__
     22# undef __attribute__
     23# define __attribute__(x)
     24#endif
     25/*@=namechecks@*/
     26
     27
     28/* Behandelt aufgetretene Fehler. error ist der Fehlertyp(enum Errors)
     29   void *SpecialData ist ein untypisierter Zeiger auf Spezielle Daten zur Fehlerbehandlung.
     30   Man koennte auch noch einen Zeiger auf eine Funktion uebergeben */
     31extern void /*@exits@*/ debug(struct Problem *P, const char *output);
     32  //__attribute__ ((__return__));
     33#define debug(err, data) debug_in((err), (data), __FILE__, __LINE__)
     34
     35extern void /*@exits@*/ debug_in(struct Problem *P, const char *output,
     36    const char *file, const int line);
     37  //__attribute__ ((__return__));
     38
    2039/* Eigene malloc, die bei einem Fehler an Error output uebergibt */
    2140void* Malloc(size_t size, const char* output);
     
    3352void* Realloci(void* pointer, size_t size, const char* output, int i);
    3453void* Reallocii(void* pointer, size_t size, const char* output, int i, int j);
    35 void Free (void *ptr);
     54void Free (void *ptr, const char* output);
    3655
    3756void GetRGB(int i, unsigned int max, double* rgb);
Note: See TracChangeset for help on using the changeset viewer.