diff --git a/src/ioc/db/test/dbStaticTest.db b/src/ioc/db/test/dbStaticTest.db index c35ff9a..6303672 100644 --- a/src/ioc/db/test/dbStaticTest.db +++ b/src/ioc/db/test/dbStaticTest.db @@ -1,7 +1,7 @@ record(x, "testrec") { - info("A", "B") alias("testalias") + info("A", "B") } alias("testrec", "testalias2") diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c index 69a4a6d..6611eca 100644 --- a/src/ioc/dbStatic/dbStaticLib.c +++ b/src/ioc/dbStatic/dbStaticLib.c @@ -1699,15 +1699,18 @@ long dbCreateAlias(DBENTRY *pdbentry, const char *alias) dbRecordNode *pnewnode; PVDENTRY *ppvd; ELLLIST *preclist = NULL; + DBENTRY dbEntry; if (!precordType) return S_dbLib_recordTypeNotFound; /* alias of alias still references actual record */ while(precnode && (precnode->flags&DBRN_FLAGS_ISALIAS)) precnode = precnode->aliasedRecnode; if (!precnode) return S_dbLib_recNotFound; - zeroDbentry(pdbentry); - if (!dbFindRecord(pdbentry, alias)) return S_dbLib_recExists; - zeroDbentry(pdbentry); - pdbentry->precordType = precordType; + /* use copy to avoid later info fields being bound to the alias */ + dbCopyEntryContents(pdbentry, &dbEntry); + zeroDbentry(&dbEntry); + if (!dbFindRecord(&dbEntry, alias)) return S_dbLib_recExists; + zeroDbentry(&dbEntry); + dbEntry.precordType = precordType; preclist = &precordType->recList; pnewnode = dbCalloc(1, sizeof(dbRecordNode)); pnewnode->recordname = epicsStrDup(alias); @@ -1718,8 +1721,9 @@ long dbCreateAlias(DBENTRY *pdbentry, const char *alias) ellInit(&pnewnode->infoList); ellAdd(preclist, &pnewnode->node); precordType->no_aliases++; - pdbentry->precnode = pnewnode; - ppvd = dbPvdAdd(pdbentry->pdbbase, precordType, pnewnode); + dbEntry.precnode = pnewnode; + ppvd = dbPvdAdd(dbEntry.pdbbase, precordType, pnewnode); + dbFinishEntry(&dbEntry); if (!ppvd) {errMessage(-1,"Logic Err: Could not add to PVD");return(-1);} return 0; }