Some processes (at least G4XxxNuclearProcess, Xxx=Photo, Electron and Positron) hold cross section data sets by value. Their addresses get registered to G4CrossSectionDataSetRegistry while the processes get registered to G4ProcessTable. If G4ProcessTable destroys first it will safely lead to the cross section data sets getting unregistered. However, if the G4CrossSectionDataSetRegistry destroys first it will attempt to delete the nuclear processes' data sets which are allocated as part of the process object. It is not possible (or at least not easy) to control which destroys first and at least on Mac and Linux with 4.9.2p01 it is the registry that wins (and my jobs that loose). I think the simplest solution is to make the data sets be held by pointer and allocated on the heap and that the processes should not assume ownership (to avoid double delete).
Hello, The problem have been fixed and the fix is available with coming this week 9.3beta release of Geant4. Vladimir