#1473: Carpet segfaults in Shutdown ---------------------+------------------------------------------------------ Reporter: knarf | Owner: eschnett Type: defect | Status: new Priority: minor | Milestone: Component: Carpet | Version: development version Resolution: | Keywords: ---------------------+------------------------------------------------------
Comment (by rhaas):
I just ran a quick test with PUGH with a parfile like this: {{{ ActiveThorns = "PUGH IOUtil IOHDF5 Debug IOASCII PUGHSlab"
Cactus::cctk_itlast = 1
IO::checkpoint_id = yes IOHDF5::checkpoint = yes
IO::checkpoint_dir = "cppugh" IO::out_dir = $parfile
debug::gasize = 12
IOASCII::out1d_every = 1 IOASCII::out1d_vars = "Debug::array" }}} where the Debug thorn provides a 1d array whose size is controlled by gasize. I then comment out {{{ debug::gasize = 12 }}} for recovery (the default is 3). PUGH behaves the same way that Carpet does. After recover the grid array has size 3 while the parameter gasize is recovered as size 12.
If we want to allow the possibility to change an array size during recovery, then we need to make sure that CP_RECOVER_PARAMETERS happens before the groups are created (which is very early I think). In particular this means that the recovery code (and any thorns that it depends on) may not assume that their grid functions exist (or at least they are not yet fully created) until after CP_RECOVER_PARAMETERS.
Carpet cannot just resize the grid arrays after recovery since it no longer knows which sizes are affected by parameter changes.
The alternative is what Erik mentioned: to checkpoint the size of (all, not just the checkpoint=yes) arrays and re-instantiate them with this size in which case Carpet can resize them (since the information is part of GroupDynamicData which the driver controls) but which does not allow them to change at recovery time.