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
+15
View File
@@ -65,6 +65,21 @@ int dbRegisterServer(dbServer *psrv)
return 0; 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) void dbsr(unsigned level)
{ {
dbServer *psrv = (dbServer *)ellFirst(&serverList); dbServer *psrv = (dbServer *)ellFirst(&serverList);
+7
View File
@@ -119,6 +119,13 @@ typedef struct dbServer {
*/ */
epicsShareFunc int dbRegisterServer(dbServer *psrv); 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. /** @brief Print dbServer Reports.
* *
* Calls the report methods of all registered servers. * Calls the report methods of all registered servers.
+11 -1
View File
@@ -110,6 +110,12 @@ dbServer illegal = {
disInit, NULL, NULL, NULL disInit, NULL, NULL, NULL
}; };
dbServer toolate = {
ELLNODE_INIT, "toolate",
NULL, NULL, NULL,
disInit, NULL, NULL, NULL
};
MAIN(dbServerTest) MAIN(dbServerTest)
{ {
@@ -117,7 +123,7 @@ MAIN(dbServerTest)
char *theName = "The One"; char *theName = "The One";
int status; int status;
testPlan(14); testPlan(18);
/* Prove that we handle substring names properly */ /* Prove that we handle substring names properly */
epicsEnvSet("EPICS_IOC_IGNORE_SERVERS", "none ones"); epicsEnvSet("EPICS_IOC_IGNORE_SERVERS", "none ones");
@@ -139,15 +145,19 @@ MAIN(dbServerTest)
dbInitServers(); dbInitServers();
testOk(oneState == INIT_CALLED, "dbInitServers"); testOk(oneState == INIT_CALLED, "dbInitServers");
testOk(disInitialized == 0, "Disabled server not initialized"); testOk(disInitialized == 0, "Disabled server not initialized");
testOk(dbRegisterServer(&toolate) != 0, "No registration while active");
dbRunServers(); dbRunServers();
testOk(oneState == RUN_CALLED, "dbRunServers"); testOk(oneState == RUN_CALLED, "dbRunServers");
testOk(dbUnregisterServer(&one) != 0, "No unregistration while active");
dbPauseServers(); dbPauseServers();
testOk(oneState == PAUSE_CALLED, "dbPauseServers"); testOk(oneState == PAUSE_CALLED, "dbPauseServers");
dbStopServers(); dbStopServers();
testOk(oneState == STOP_CALLED, "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"); testDiag("Printing server report");
dbsr(0); dbsr(0);