Added dbUnregisterServer() routine, plus tests
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user