ioc/db: dbRegisterServer() only warn on actual redefinition
avoid noise when simply run twice.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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'");
|
||||
|
||||
Reference in New Issue
Block a user