ioc/db: dbRegisterServer() only warn on actual redefinition

avoid noise when simply run twice.
This commit is contained in:
Michael Davidsaver
2018-11-04 11:43:38 -08:00
parent ebe7cf046e
commit 30268e3577
2 changed files with 18 additions and 6 deletions
+10 -4
View File
@@ -12,6 +12,7 @@
#include <stddef.h>
#include <string.h>
#include "dbDefs.h"
#include "ellLib.h"
#include "envDefs.h"
#include "epicsStdio.h"
@@ -29,6 +30,7 @@ static char *stateNames[] = {
int dbRegisterServer(dbServer *psrv)
{
const char * ignore = envGetConfigParamPtr(&EPICS_IOC_IGNORE_SERVERS);
ELLNODE *node;
if (!psrv || !psrv->name || state != registering)
return -1;
@@ -55,10 +57,14 @@ int dbRegisterServer(dbServer *psrv)
}
}
if (ellNext(&psrv->node) || ellLast(&serverList) == &psrv->node) {
fprintf(stderr, "dbRegisterServer: '%s' registered twice?\n",
psrv->name);
return -1;
for(node=ellFirst(&serverList); node; node = ellNext(node)) {
dbServer *cur = CONTAINER(node, dbServer, node);
if(cur==psrv) {
return 0; /* already registered identically. */
} else if(strcmp(cur->name, psrv->name)==0) {
fprintf(stderr, "dbRegisterServer: Can't redefine '%s'.\n", cur->name);
return -1;
}
}
ellAdd(&serverList, &psrv->node);
+8 -2
View File
@@ -79,6 +79,11 @@ dbServer one = {
oneInit, oneRun, onePause, oneStop
};
dbServer one2 = {
ELLNODE_INIT, "one",
oneReport, oneStats, oneClient,
oneInit, oneRun, onePause, oneStop
};
/* Server layer for testing NULL methods */
@@ -123,7 +128,7 @@ MAIN(dbServerTest)
char *theName = "The One";
int status;
testPlan(24);
testPlan(25);
/* Prove that we handle substring names properly */
epicsEnvSet("EPICS_IOC_IGNORE_SERVERS", "none ones");
@@ -132,7 +137,8 @@ MAIN(dbServerTest)
testOk(dbRegisterServer(&one) == 0, "Registered 'one'");
testOk1(oneState == NOTHING_CALLED);
testOk(dbRegisterServer(&one) != 0, "Duplicate registration rejected");
testOk(dbRegisterServer(&one) == 0, "Duplicate registration accepted");
testOk(dbRegisterServer(&one2) != 0, "change registration rejected");
testOk(dbRegisterServer(&illegal) != 0, "Illegal registration rejected");
testDiag("Registering dbServer 'no-routines'");