diff --git a/src/ioc/PVAClientRegister.cpp b/src/ioc/PVAClientRegister.cpp index 517c9f4..f3cafc2 100644 --- a/src/ioc/PVAClientRegister.cpp +++ b/src/ioc/PVAClientRegister.cpp @@ -32,10 +32,6 @@ using std::endl; using namespace epics::pvData; using namespace epics::pvAccess; -//static void pvaClientExitHandler(void* /*pPrivate*/) { -//cout << "pvaClientExitHandler\n"; -// ClientFactory::stop(); -//} static const iocshFuncDef startPVAClientFuncDef = { "startPVAClient", 0, 0 @@ -44,7 +40,6 @@ static const iocshFuncDef startPVAClientFuncDef = { extern "C" void startPVAClient(const iocshArgBuf *args) { ClientFactory::start(); -// epicsAtExit(pvaClientExitHandler, NULL); } diff --git a/src/ioc/PVAServerRegister.cpp b/src/ioc/PVAServerRegister.cpp index 61145f8..94d2eec 100644 --- a/src/ioc/PVAServerRegister.cpp +++ b/src/ioc/PVAServerRegister.cpp @@ -37,71 +37,22 @@ using std::endl; using namespace epics::pvData; using namespace epics::pvAccess; -class PVAServerCTX; -typedef std::tr1::shared_ptr PVAServerCTXPtr; - -class PVAServerCTX : - public std::tr1::enable_shared_from_this -{ -public: - POINTER_DEFINITIONS(PVAServerCTX); - static PVAServerCTXPtr getPVAServerCTX(); - void start(); - void stop(); - virtual ~PVAServerCTX() {} -private: - PVAServerCTX() {} - shared_pointer getPtrSelf() - { - return shared_from_this(); - } - ServerContext::shared_pointer ctx; -}; - -void PVAServerCTX::start() -{ - if(ctx.get()) { - cout<< "PVAServer already started" << endl; - return; - } - ctx = startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true); -} - -void PVAServerCTX::stop() -{ - if(!ctx.get()) { - cout<< "PVAServer already stopped" << endl; - return; - } - ctx->destroy(); - ctx.reset(); - epicsThreadSleep(1.0); -} - -PVAServerCTXPtr PVAServerCTX::getPVAServerCTX() -{ - static PVAServerCTXPtr pvPVAServerCTX; - static Mutex mutex; - Lock xx(mutex); - - if(!pvPVAServerCTX.get()) { - pvPVAServerCTX = PVAServerCTXPtr(new PVAServerCTX()); - } - return pvPVAServerCTX; -} - -static void pvaServerExitHandler(void* /*pPrivate*/) { - cout << "pvaServerExitHandler\n"; - PVAServerCTX::getPVAServerCTX()->stop(); -} +static const iocshArg startPVAServerArg0 = { "providerNames", iocshArgString }; +static const iocshArg *startPVAServerArgs[] = { + &startPVAServerArg0}; static const iocshFuncDef startPVAServerFuncDef = { - "startPVAServer", 0, 0 + "startPVAServer", 1, startPVAServerArgs }; -extern "C" void startPVAServer(const iocshArgBuf *args) +static void startPVAServer(const iocshArgBuf *args) { - PVAServerCTX::getPVAServerCTX()->start(); - epicsAtExit(pvaServerExitHandler, NULL); + char *names = args[0].sval; + if(!names) { + startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true); + } else { + std::string providerNames(names); + startPVAServer(providerNames,0,true,true); + } }