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