aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364>2004-06-29 08:40:03 +0000
committertradke <tradke@b61c5cb5-eaca-4651-9a7a-d64986f99364>2004-06-29 08:40:03 +0000
commitf9ffeddc36c783357fd689b9da744b495094703e (patch)
treed0e38fe7f96d6e341c4cb7eb8e771c6bd8691bcf /src
parent69f40164f33675a75b5a36f67d5d2872feb39bd8 (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.c39
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;
}