Added dbUnregisterServer() routine, plus tests

This commit is contained in:
Andrew Johnson
2017-10-18 18:12:21 -05:00
parent 0406ecebe9
commit fb5a2d8475
3 changed files with 33 additions and 1 deletions

View File

@@ -65,6 +65,21 @@ int dbRegisterServer(dbServer *psrv)
return 0;
}
int dbUnregisterServer(dbServer *psrv)
{
if (state != registering && state != stopped) {
fprintf(stderr, "dbUnregisterServer: Servers still active!\n");
return -1;
}
if (ellFind(&serverList, &psrv->node) < 0) {
fprintf(stderr, "dbUnregisterServer: '%s' not registered.\n",
psrv->name);
return -1;
}
ellDelete(&serverList, &psrv->node);
return 0;
}
void dbsr(unsigned level)
{
dbServer *psrv = (dbServer *)ellFirst(&serverList);

View File

@@ -119,6 +119,13 @@ typedef struct dbServer {
*/
epicsShareFunc int dbRegisterServer(dbServer *psrv);
/** @brief Unregister a server layer
*
* This should only be called when the servers are inactive.
* @param psrv Server information structure for the server
*/
epicsShareFunc int dbUnregisterServer(dbServer *psrv);
/** @brief Print dbServer Reports.
*
* Calls the report methods of all registered servers.

View File

@@ -110,6 +110,12 @@ dbServer illegal = {
disInit, NULL, NULL, NULL
};
dbServer toolate = {
ELLNODE_INIT, "toolate",
NULL, NULL, NULL,
disInit, NULL, NULL, NULL
};
MAIN(dbServerTest)
{
@@ -117,7 +123,7 @@ MAIN(dbServerTest)
char *theName = "The One";
int status;
testPlan(14);
testPlan(18);
/* Prove that we handle substring names properly */
epicsEnvSet("EPICS_IOC_IGNORE_SERVERS", "none ones");
@@ -139,15 +145,19 @@ MAIN(dbServerTest)
dbInitServers();
testOk(oneState == INIT_CALLED, "dbInitServers");
testOk(disInitialized == 0, "Disabled server not initialized");
testOk(dbRegisterServer(&toolate) != 0, "No registration while active");
dbRunServers();
testOk(oneState == RUN_CALLED, "dbRunServers");
testOk(dbUnregisterServer(&one) != 0, "No unregistration while active");
dbPauseServers();
testOk(oneState == PAUSE_CALLED, "dbPauseServers");
dbStopServers();
testOk(oneState == STOP_CALLED, "dbStopServers");
testOk(dbUnregisterServer(&toolate) != 0, "No unregistration if not reg'ed");
testOk(dbUnregisterServer(&no_routines) == 0, "Unregistered 'no-routines'");
testDiag("Printing server report");
dbsr(0);