I'm learn towards not having a master "destroy all lists" approach (the current model) and just having each XXXFinalizePackage() call PetscFunctionListDestroy(&appropriate) so the XRegisterDestroy() are gone.
Does anyone have a reason to call XRegisterDestroy() independent of XFinalizePackage()?
PetscFunctionListDestroy(&XList) is enough even in this case, but I'd like to understand the use case if it exists.