From 58fe25205a7f6b7747c16d28df7cbb6ac43aa3d4 Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Mon, 10 Jan 2022 14:06:51 +0100 Subject: [PATCH] cdi_create_records: init fdbItem. --- src/stream_record.c | 48 +++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/stream_record.c b/src/stream_record.c index 621fa1415..5adc63a9d 100644 --- a/src/stream_record.c +++ b/src/stream_record.c @@ -277,15 +277,15 @@ void cdi_create_records(stream_t *streamptr, int tsID) tsteps_t *sourceTstep = streamptr->tsteps; tsteps_t *destTstep = sourceTstep + tsID; - if ( destTstep->records ) return; + if (destTstep->records) return; int vlistID = streamptr->vlistID; - if ( tsID == 0 ) + if (tsID == 0) { maxrecords = 0; int nvars = streamptr->nvars; - for ( int varID = 0; varID < nvars; varID++) + for (int varID = 0; varID < nvars; varID++) for (int isub=0; isub<streamptr->vars[varID].subtypeSize; isub++) maxrecords += (unsigned)streamptr->vars[varID].recordTable[isub].nlevs; } @@ -294,21 +294,28 @@ void cdi_create_records(stream_t *streamptr, int tsID) maxrecords = (unsigned)sourceTstep->recordSize; } - if ( tsID == 0 ) + if (tsID == 0) { nrecords = maxrecords; } - else if ( tsID == 1 ) + else if (tsID == 1) { nrecords = 0; maxrecords = (unsigned)sourceTstep->recordSize; - for ( unsigned recID = 0; recID < maxrecords; recID++ ) - { - int varID = sourceTstep->records[recID].varID; - nrecords += (varID == CDI_UNDEFID /* varID = CDI_UNDEFID for write mode !!! */ - || vlistInqVarTimetype(vlistID, varID) != TIME_CONSTANT); - // printf("varID nrecords %d %d %d \n", varID, nrecords, vlistInqVarTsteptype(vlistID, varID)); - } + if (sourceTstep->records) + { + for (unsigned recID = 0; recID < maxrecords; recID++) + { + int varID = sourceTstep->records[recID].varID; + nrecords += (varID == CDI_UNDEFID /* varID = CDI_UNDEFID for write mode !!! */ + || vlistInqVarTimetype(vlistID, varID) != TIME_CONSTANT); + // printf("varID nrecords %d %d %d \n", varID, nrecords, vlistInqVarTsteptype(vlistID, varID)); + } + } + else + { + nrecords = maxrecords; + } } else { @@ -317,28 +324,31 @@ void cdi_create_records(stream_t *streamptr, int tsID) // printf("tsID, nrecords %d %d\n", tsID, nrecords); record_t *records = NULL; - if ( maxrecords > 0 ) records = (record_t *) Malloc(maxrecords*sizeof(record_t)); + if (maxrecords > 0) records = (record_t *) Malloc(maxrecords*sizeof(record_t)); destTstep->records = records; destTstep->recordSize = (int)maxrecords; destTstep->nallrecs = (int)nrecords; +#ifdef HAVE_LIBFDB5 + destTstep->records->fdbItem = NULL; +#endif - if ( tsID == 0 ) + if (tsID == 0) { - for ( unsigned recID = 0; recID < maxrecords; recID++ ) + for (unsigned recID = 0; recID < maxrecords; recID++) recordInitEntry(&destTstep->records[recID]); } - else + else if (sourceTstep->records) { memcpy(destTstep->records, sourceTstep->records, (size_t)maxrecords*sizeof(record_t)); - for ( unsigned recID = 0; recID < maxrecords; recID++ ) + for (unsigned recID = 0; recID < maxrecords; recID++) { record_t *curRecord = &sourceTstep->records[recID]; destTstep->records[recID].used = curRecord->used; - if ( curRecord->used != CDI_UNDEFID && curRecord->varID != -1 ) /* curRecord->varID = -1 for write mode !!! */ + if (curRecord->used != CDI_UNDEFID && curRecord->varID != -1) // curRecord->varID = -1 for write mode !!! { - if ( vlistInqVarTimetype(vlistID, curRecord->varID) != TIME_CONSTANT ) + if (vlistInqVarTimetype(vlistID, curRecord->varID) != TIME_CONSTANT) { destTstep->records[recID].position = CDI_UNDEFID; destTstep->records[recID].size = 0; -- GitLab