Fehler im Append-Mode?
Hallo Uwe (nebenbei: Ein Frohes Neues)!
Auf unserem System sind wir (@b381035) in einem ICON-Testfall auf ein Problem gestoßen, das mit dem Aufruf von streamClose
und einem anschließendem, explizitem Aufräumen von vlistDestroy
[4] zusammenzuhängen scheint.
Normalerweise dürfte die Reihenfolge, bestehend aus CALL streamClose(streamID)
[5], und erst danach CALL vlistDestroy(vlistID)
unproblematisch sein, siehe das Beispielprogramm [1].
In unserem Fall bricht aber taxisDestroy
(das in vlistDestroy
enthalten ist) mit einer Fehlermeldung in reshGetElem
ab, da es das Element in der "Resouce Handle"-Liste nicht mehr gibt.
Eine Besonderheit in unserem Testfall ist jedoch
streamptr->filemode != 'a'
d.h. die Datei wurde im "Append-Mode" geöffnet. Dann könnte diese Stelle hier die Ursache unseres Absturzes sein [2]:
if (streamptr->filemode != 'w' && vlistInqTaxis(vlistID) != -1) taxisDestroy(vlistInqTaxis(vlistID));
Uns erscheint es sinnvoll, dies für den Append-Mode zu erweitern:
if (streamptr->filemode != 'w' && streamptr->filemode != 'a' && vlistInqTaxis(vlistID) != -1)
taxisDestroy(vlistInqTaxis(vlistID));
Allerdings scheint das noch nicht die vollständige Lösung zu sein, da auch cdiVlistDestroy_
[3] übersprungen werden muss, damit nicht der anschließende, manuelle Aufruf vonvlistDestroy
mit einer ähnlichen Fehlermeldung wie das Taxis-Objekt abbricht. Meine Vermutung ist die, dass auch hier der Append-Mode nicht berücksichtigt wurde?
Viele Grüße
Florian
[1] https://gitlab.dkrz.de/mpim-sw/libcdi/-/blob/master/examples/cdi_write_f.f#L93
[2] https://gitlab.dkrz.de/mpim-sw/libcdi/-/blob/master/src/stream.c#L1181
[3] https://gitlab.dkrz.de/mpim-sw/libcdi/-/blob/master/src/stream.c#L1182
[4] https://gitlab.dkrz.de/icon/icon-nwp/-/blob/master/src/io/shared/mo_name_list_output.f90#L512
[5] https://gitlab.dkrz.de/icon/icon-nwp/-/blob/master/src/io/shared/mo_name_list_output.f90#L490