diff options
author | tradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 2004-06-29 08:40:03 +0000 |
---|---|---|
committer | tradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364> | 2004-06-29 08:40:03 +0000 |
commit | f9ffeddc36c783357fd689b9da744b495094703e (patch) | |
tree | d0e38fe7f96d6e341c4cb7eb8e771c6bd8691bcf /src | |
parent | 69f40164f33675a75b5a36f67d5d2872feb39bd8 (diff) |
Don't try to free zero-sized vector groups.
This closes PR CactusPUGH/1792: "Zero sized vector groups kill PUGH".
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGH/trunk@447 b61c5cb5-eaca-4651-9a7a-d64986f99364
Diffstat (limited to 'src')
-rw-r--r-- | src/SetupPGH.c | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/SetupPGH.c b/src/SetupPGH.c index cd51f16..b14088e 100644 --- a/src/SetupPGH.c +++ b/src/SetupPGH.c @@ -244,16 +244,20 @@ void PUGH_DestroyPGH (pGH **GHin) /* Great. Now go about the work of destroying me. */ variable = 0; - for(group = 0; group < CCTK_NumGroups(); group++) + for (group = CCTK_NumGroups () - 1; group >= 0; group--) { #ifdef DEBUG_PUGH - printf("Calling Destroying Group %s\n", CCTK_GroupName(group)); - fflush(stdout); + printf ("Calling Destroying Group %s\n", CCTK_GroupName (group)); + fflush (stdout); #endif - CCTK_GroupData(group,&pgroup); + CCTK_GroupData (group, &pgroup); + if (! pgroup.numvars) + { + continue; + } - GA = (pGA *) GH->variables[variable][0]; + GA = GH->variables[variable][0]; /* Destroy group comm buffers */ if (GA->groupcomm) @@ -280,28 +284,25 @@ void PUGH_DestroyPGH (pGH **GHin) for (this_var = 0; this_var < pgroup.numvars; this_var++, variable++) { - for(i = 0 ; i < pgroup.numtimelevels; i++) + for (i = 0 ; i < pgroup.numtimelevels; i++) { - PUGH_DestroyGArray(&(((pGA ***)GH->variables)[variable][i])); + PUGH_DestroyGArray (&(((pGA ***)GH->variables)[variable][i])); } - free(GH->variables[variable]); + free (GH->variables[variable]); } } - for (i=1;i<=GH->dim;i++) + for (i = 0; i < GH->dim; i++) { - PUGH_DestroyConnectivity(&GH->Connectivity[i-1]); - PUGH_DestroyPGExtras(&GH->GFExtras[i-1]); + PUGH_DestroyConnectivity (GH->Connectivity + i); + PUGH_DestroyPGExtras (GH->GFExtras + i); } - if(GH->identity_string) - { - free(GH->identity_string); - } - free(GH->Connectivity); - free(GH->GFExtras); - free(GH->variables); - free(GH); + free (GH->identity_string); + free (GH->Connectivity); + free (GH->GFExtras); + free (GH->variables); + free (GH); *GHin = NULL; } |