From 60f51d6688e98ed87d24e6e9d1f179ca5db8f07a Mon Sep 17 00:00:00 2001 From: Marc Laukien Date: Mon, 17 Sep 2001 22:04:17 +0000 Subject: tons of fixes --- cpp/src/Freeze/DBI.cpp | 116 ++++++++++++++++++++++------------ cpp/src/Ice/CommunicatorI.cpp | 2 +- cpp/src/Ice/Instance.cpp | 17 +++-- cpp/src/Ice/Instance.h | 4 +- cpp/src/Ice/LoggerI.cpp | 6 ++ cpp/src/Ice/LoggerI.h | 1 + cpp/src/Ice/ObjectAdapterI.cpp | 2 + cpp/src/Ice/ServantFactoryManager.cpp | 4 ++ cpp/src/Ice/Stream.cpp | 2 +- cpp/src/Ice/SysLoggerI.cpp | 6 ++ cpp/src/Ice/SysLoggerI.h | 1 + cpp/src/Ice/TraceLevels.cpp | 6 ++ cpp/src/IcePack/Client.cpp | 12 ++-- cpp/src/IcePack/Forward.cpp | 16 ++++- cpp/src/IcePack/Forward.h | 1 + cpp/src/IcePack/Parser.cpp | 21 +++--- cpp/src/IcePack/Server.cpp | 15 +++-- 17 files changed, 152 insertions(+), 80 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/Freeze/DBI.cpp b/cpp/src/Freeze/DBI.cpp index 4ea2d552ba0..fc8b1510083 100644 --- a/cpp/src/Freeze/DBI.cpp +++ b/cpp/src/Freeze/DBI.cpp @@ -11,6 +11,7 @@ #include #include #include +#include using namespace std; using namespace Ice; @@ -31,7 +32,10 @@ Freeze::DBI::~DBI() { if (_db) { - _communicator->getLogger()->warning("database has not been closed"); + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "\"" << _name << "\" has not been closed"; + _communicator->getLogger()->warning(s.str()); } } @@ -47,8 +51,11 @@ Freeze::DBI::put(const std::string& key, const ::Ice::ObjectPtr& servant) if(!_db) { + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "\"" << _name << "\" has been closed"; DBException ex; - ex.message = "Freeze::DB::open: database has been closed"; + ex.message = s.str(); throw ex; } @@ -77,9 +84,11 @@ Freeze::DBI::put(const std::string& key, const ::Ice::ObjectPtr& servant) ret = txn_begin(_dbenv, 0, &tid, 0); if (ret != 0) { + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "txn_begin: " << db_strerror(ret); DBException ex; - ex.message = "txn_begin: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } @@ -94,9 +103,11 @@ Freeze::DBI::put(const std::string& key, const ::Ice::ObjectPtr& servant) ret = txn_commit(tid, 0); if (ret != 0) { + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "txn_commit: " << db_strerror(ret); DBException ex; - ex.message = "txn_commit: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } return; // We're done @@ -110,9 +121,11 @@ Freeze::DBI::put(const std::string& key, const ::Ice::ObjectPtr& servant) ret = txn_abort(tid); if (ret != 0) { + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "txn_abort: " << db_strerror(ret); DBException ex; - ex.message = "txn_abort: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } break; // Repeat @@ -123,9 +136,11 @@ Freeze::DBI::put(const std::string& key, const ::Ice::ObjectPtr& servant) // // Error, run recovery // + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "DB->put: " << db_strerror(ret); DBException ex; - ex.message = "DB->put: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } } @@ -144,8 +159,11 @@ Freeze::DBI::get(const std::string& key) if(!_db) { + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "\"" << _name << "\" has been closed"; DBException ex; - ex.message = "Freeze::DB::open: database has been closed"; + ex.message = s.str(); throw ex; } @@ -204,12 +222,11 @@ Freeze::DBI::get(const std::string& key) default: { - // - // Error, run recovery - // + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "DB->get: " << db_strerror(ret); DBException ex; - ex.message = "DB->get: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } } @@ -227,8 +244,11 @@ Freeze::DBI::del(const std::string& key) if(!_db) { + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "\"" << _name << "\" has been closed"; DBException ex; - ex.message = "Freeze::DB::open: database has been closed"; + ex.message = s.str(); throw ex; } } @@ -246,9 +266,11 @@ Freeze::DBI::close() int ret = _db->close(_db, 0); if(ret != 0) { + ostringstream s; + s << "Freeze::DB(\"" << _name << "\"): "; + s << "DB->close: " << db_strerror(ret); DBException ex; - ex.message = "DB->close: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } @@ -263,26 +285,26 @@ Freeze::DBEnvI::DBEnvI(const CommunicatorPtr& communicator, const PropertiesPtr& _properties(properties), _dbenv(0) { + _directory = _properties->getProperty("Freeze.Directory"); + if (_directory.empty()) + { + _directory = "."; + } + int ret; ret = db_env_create(&_dbenv, 0); if (ret != 0) { + ostringstream s; + s << "Freeze::DBEnv(\"" << _directory << "\"): "; + s << "db_env_create: " << db_strerror(ret); DBException ex; - ex.message = "db_env_create: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } - _directory = _properties->getProperty("Freeze.Directory"); - - const char* dir = 0; - if (!_directory.empty()) - { - dir = _directory.c_str(); - } - - ret = _dbenv->open(_dbenv, dir, + ret = _dbenv->open(_dbenv, _directory.c_str(), DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | @@ -293,9 +315,11 @@ Freeze::DBEnvI::DBEnvI(const CommunicatorPtr& communicator, const PropertiesPtr& S_IRUSR | S_IWUSR); if (ret != 0) { + ostringstream s; + s << "Freeze::DBEnv(\"" << _directory << "\"): "; + s << "DB_ENV->open: " << db_strerror(ret); DBException ex; - ex.message = "DB_ENV->open: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } } @@ -304,7 +328,10 @@ Freeze::DBEnvI::~DBEnvI() { if (_dbenv) { - _communicator->getLogger()->warning("database environment object has not been closed"); + ostringstream s; + s << "Freeze::DBEnv(\"" << _directory << "\"): "; + s << "\"" << _directory << "\" has not been closed"; + _communicator->getLogger()->warning(s.str()); } } @@ -315,8 +342,11 @@ Freeze::DBEnvI::open(const string& name) if(!_dbenv) { + ostringstream s; + s << "Freeze::DBEnv(\"" << _directory << "\"): "; + s << "\"" << _directory << "\" has been closed"; DBException ex; - ex.message = "Freeze::DBEnv::open: database environment has been closed"; + ex.message = s.str(); throw ex; } @@ -332,18 +362,22 @@ Freeze::DBEnvI::open(const string& name) ret = db_create(&db, _dbenv, 0); if(ret != 0) { + ostringstream s; + s << "Freeze::DBEnv(\"" << _directory << "\"): "; + s << "db_create: " << db_strerror(ret); DBException ex; - ex.message = "db_create: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } ret = db->open(db, name.c_str(), 0, DB_BTREE, DB_CREATE | DB_THREAD, S_IRUSR | S_IWUSR); if(ret != 0) { + ostringstream s; + s << "Freeze::DBEnv(\"" << _directory << "\"): "; + s << "DB->open: " << db_strerror(ret); DBException ex; - ex.message = "DB->open: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } @@ -371,9 +405,11 @@ Freeze::DBEnvI::close() int ret = _dbenv->close(_dbenv, 0); if(ret != 0) { + ostringstream s; + s << "Freeze::DBEnv(\"" << _directory << "\"): "; + s << "DB_ENV->close: " << db_strerror(ret); DBException ex; - ex.message = "DB_ENV->close: "; - ex.message += db_strerror(ret); + ex.message = s.str(); throw ex; } diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp index 14e8016b7f6..05d1aaecc6f 100644 --- a/cpp/src/Ice/CommunicatorI.cpp +++ b/cpp/src/Ice/CommunicatorI.cpp @@ -114,7 +114,7 @@ Ice::CommunicatorI::installServantFactory(const ServantFactoryPtr& factory, cons { throw CommunicatorDestroyedException(__FILE__, __LINE__); } - _instance->valueFactoryManager()->install(factory, id); + _instance->servantFactoryManager()->install(factory, id); } PropertiesPtr diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp index d6e71b97d6a..5be7f7c3dca 100644 --- a/cpp/src/Ice/Instance.cpp +++ b/cpp/src/Ice/Instance.cpp @@ -122,10 +122,10 @@ IceInternal::Instance::emitterFactory() } ServantFactoryManagerPtr -IceInternal::Instance::valueFactoryManager() +IceInternal::Instance::servantFactoryManager() { JTCSyncT sync(*this); - return _valueFactoryManager; + return _servantFactoryManager; } ObjectAdapterFactoryPtr @@ -262,7 +262,7 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Prope _proxyFactory = new ProxyFactory(this); _threadPool = new ThreadPool(this); _emitterFactory = new EmitterFactory(this); - _valueFactoryManager = new ServantFactoryManager(); + _servantFactoryManager = new ServantFactoryManager(); _objectAdapterFactory = new ObjectAdapterFactory(this); _pickler = new PicklerI(this); } @@ -282,7 +282,7 @@ IceInternal::Instance::~Instance() assert(!_proxyFactory); assert(!_threadPool); assert(!_emitterFactory); - assert(!_valueFactoryManager); + assert(!_servantFactoryManager); assert(!_objectAdapterFactory); assert(!_pickler); @@ -350,8 +350,7 @@ IceInternal::Instance::destroy() if(_logger) { - // No destroy function defined - // _logger->destroy(); + _logger->destroy(); _logger = 0; } @@ -375,10 +374,10 @@ IceInternal::Instance::destroy() _emitterFactory = 0; } - if(_valueFactoryManager) + if(_servantFactoryManager) { - _valueFactoryManager->destroy(); - _valueFactoryManager = 0; + _servantFactoryManager->destroy(); + _servantFactoryManager = 0; } if(_objectAdapterFactory) diff --git a/cpp/src/Ice/Instance.h b/cpp/src/Ice/Instance.h index 640156c2e29..162f483d9d4 100644 --- a/cpp/src/Ice/Instance.h +++ b/cpp/src/Ice/Instance.h @@ -46,7 +46,7 @@ public: ProxyFactoryPtr proxyFactory(); ThreadPoolPtr threadPool(); EmitterFactoryPtr emitterFactory(); - ServantFactoryManagerPtr valueFactoryManager(); + ServantFactoryManagerPtr servantFactoryManager(); ObjectAdapterFactoryPtr objectAdapterFactory(); ::Ice::PicklerPtr pickler(); @@ -64,7 +64,7 @@ private: ProxyFactoryPtr _proxyFactory; ThreadPoolPtr _threadPool; EmitterFactoryPtr _emitterFactory; - ServantFactoryManagerPtr _valueFactoryManager; + ServantFactoryManagerPtr _servantFactoryManager; ObjectAdapterFactoryPtr _objectAdapterFactory; ::Ice::PicklerPtr _pickler; diff --git a/cpp/src/Ice/LoggerI.cpp b/cpp/src/Ice/LoggerI.cpp index 94fe46eabd5..931ff715ec9 100644 --- a/cpp/src/Ice/LoggerI.cpp +++ b/cpp/src/Ice/LoggerI.cpp @@ -41,3 +41,9 @@ Ice::LoggerI::error(const string& message) JTCSyncT sync(*this); cerr << "error: " << message << endl; } + +void +Ice::LoggerI::destroy() +{ + // Nothing to do +} diff --git a/cpp/src/Ice/LoggerI.h b/cpp/src/Ice/LoggerI.h index dfc41b82e90..9cc18bcc5fa 100644 --- a/cpp/src/Ice/LoggerI.h +++ b/cpp/src/Ice/LoggerI.h @@ -23,6 +23,7 @@ public: virtual void trace(const std::string&, const std::string&); virtual void warning(const std::string&); virtual void error(const std::string&); + virtual void destroy(); }; } diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index 6a52c0ef8f8..877472ddbb1 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -85,6 +85,8 @@ Ice::ObjectAdapterI::deactivate() _collectorFactories.clear(); _activeServantMap.clear(); _activeServantMapHint = _activeServantMap.begin(); + _locator->deactivate(); + _locator = 0; } ObjectPrx diff --git a/cpp/src/Ice/ServantFactoryManager.cpp b/cpp/src/Ice/ServantFactoryManager.cpp index 924f8729a3e..5064eef27c0 100644 --- a/cpp/src/Ice/ServantFactoryManager.cpp +++ b/cpp/src/Ice/ServantFactoryManager.cpp @@ -49,5 +49,9 @@ void IceInternal::ServantFactoryManager::destroy() { JTCSyncT sync(*this); + for (map::iterator p = 0; p != _factories.end(); ++p) + { + p->second->destroy(); + } _factories.clear(); } diff --git a/cpp/src/Ice/Stream.cpp b/cpp/src/Ice/Stream.cpp index f544a4c2541..cf3b50a53ef 100644 --- a/cpp/src/Ice/Stream.cpp +++ b/cpp/src/Ice/Stream.cpp @@ -820,7 +820,7 @@ IceInternal::Stream::read(ObjectPtr& v, const string& type) vector::const_iterator p; for (p = classIds.begin(); p != classIds.end(); ++p) { - ServantFactoryPtr factory = _instance->valueFactoryManager()->lookup(*p); + ServantFactoryPtr factory = _instance->servantFactoryManager()->lookup(*p); if (factory) { diff --git a/cpp/src/Ice/SysLoggerI.cpp b/cpp/src/Ice/SysLoggerI.cpp index 05281f68617..0dcab397509 100644 --- a/cpp/src/Ice/SysLoggerI.cpp +++ b/cpp/src/Ice/SysLoggerI.cpp @@ -42,3 +42,9 @@ Ice::SysLoggerI::error(const string& message) JTCSyncT sync(*this); syslog(LOG_ERR, "%s", message.c_str()); } + +void +Ice::SysLoggerI::destroy() +{ + // Nothing to do +} diff --git a/cpp/src/Ice/SysLoggerI.h b/cpp/src/Ice/SysLoggerI.h index 2dc7b04542a..f77ead921f6 100644 --- a/cpp/src/Ice/SysLoggerI.h +++ b/cpp/src/Ice/SysLoggerI.h @@ -23,6 +23,7 @@ public: virtual void trace(const std::string&, const std::string&); virtual void warning(const std::string&); virtual void error(const std::string&); + virtual void destroy(); }; } diff --git a/cpp/src/Ice/TraceLevels.cpp b/cpp/src/Ice/TraceLevels.cpp index e35c30c3a96..05eaecbfa9d 100644 --- a/cpp/src/Ice/TraceLevels.cpp +++ b/cpp/src/Ice/TraceLevels.cpp @@ -31,15 +31,21 @@ IceInternal::TraceLevels::TraceLevels(const PropertiesPtr& properties) : value = properties->getProperty(keyBase + networkCat); if (!value.empty()) + { const_cast(network) = atoi(value.c_str()); + } value = properties->getProperty(keyBase + protocolCat); if (!value.empty()) + { const_cast(protocol) = atoi(value.c_str()); + } value = properties->getProperty(keyBase + retryCat); if (!value.empty()) + { const_cast(retry) = atoi(value.c_str()); + } } IceInternal::TraceLevels::~TraceLevels() diff --git a/cpp/src/IcePack/Client.cpp b/cpp/src/IcePack/Client.cpp index c4853e153d1..79053fcdcee 100644 --- a/cpp/src/IcePack/Client.cpp +++ b/cpp/src/IcePack/Client.cpp @@ -122,16 +122,16 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator) } PropertiesPtr properties = communicator->getProperties(); - - string adminEndpoints = properties->getProperty("Ice.Adapter.Admin.Endpoints"); - if (adminEndpoints.length() == 0) + const char* adminEndpointsProperty = "Ice.Adapter.Admin.Endpoints"; + string adminEndpoints = properties->getProperty(adminEndpointsProperty); + if (adminEndpoints.empty()) { - cerr << argv[0] << ": `Ice.Adapter.Admin.Endpoints' property is not set" << endl; + cerr << argv[0] << ": property `" << adminEndpointsProperty << "' is not set" << endl; return EXIT_FAILURE; } - Ice::ObjectPrx adminBase = communicator->stringToProxy("admin:" + adminEndpoints); - AdminPrx admin = AdminPrx::checkedCast(adminBase); + Ice::ObjectPrx base = communicator->stringToProxy("admin:" + adminEndpoints); + AdminPrx admin = AdminPrx::checkedCast(base); if (!admin) { cerr << argv[0] << ": `" << adminEndpoints << "' are no valid administrative endpoints" << endl; diff --git a/cpp/src/IcePack/Forward.cpp b/cpp/src/IcePack/Forward.cpp index 6f35d679ef1..4cc4669d356 100644 --- a/cpp/src/IcePack/Forward.cpp +++ b/cpp/src/IcePack/Forward.cpp @@ -46,9 +46,6 @@ IcePack::Forward::Forward(const CommunicatorPtr& communicator, const AdminPtr& a IcePack::Forward::~Forward() { -#ifndef WIN32 - _activator->destroy(); -#endif } ObjectPtr @@ -69,6 +66,9 @@ IcePack::Forward::locate(const ObjectAdapterPtr& adapter, const string& identity } #ifndef WIN32 + + assert(_activator); + // // We only try to activate if we have a path for the server // @@ -153,6 +153,7 @@ IcePack::Forward::locate(const ObjectAdapterPtr& adapter, const string& identity _communicator->getLogger()->error(s.str()); } } + #endif throw LocationForward(desc.object); @@ -163,3 +164,12 @@ IcePack::Forward::finished(const ObjectAdapterPtr&, const string&, const ObjectP { // Nothing to do } + +void +IcePack::Forward::deactivate() +{ +#ifndef WIN32 + _activator->destroy(); + _activator = 0; +#endif +} diff --git a/cpp/src/IcePack/Forward.h b/cpp/src/IcePack/Forward.h index 11bae523b36..990e200d250 100644 --- a/cpp/src/IcePack/Forward.h +++ b/cpp/src/IcePack/Forward.h @@ -29,6 +29,7 @@ public: virtual Ice::ObjectPtr locate(const Ice::ObjectAdapterPtr&, const std::string&, Ice::ObjectPtr&); virtual void finished(const Ice::ObjectAdapterPtr&, const std::string&, const Ice::ObjectPtr&, const Ice::ObjectPtr&); + virtual void deactivate(); private: diff --git a/cpp/src/IcePack/Parser.cpp b/cpp/src/IcePack/Parser.cpp index 377c0ca2546..821ded8ead3 100644 --- a/cpp/src/IcePack/Parser.cpp +++ b/cpp/src/IcePack/Parser.cpp @@ -39,14 +39,13 @@ void IcePack::Parser::usage() { cout << - "help Print this message.\n" - "exit, quit Exit this program.\n" - "add proxy [path [args...]] Add a proxy with an optional path and program\n" - " arguments.\n" - "remove proxy Remove a proxy.\n" - "list List all server descriptions.\n" - "shutdown Shutdown the IcePack server.\n" - << endl; + "help Print this message.\n" + "exit, quit Exit this program.\n" + "add PROXY [PATH [ARGS...]] Add PROXY with an optional PATH and program\n" + " arguments ARGS.\n" + "remove PROXY Remove PROXY.\n" + "list List all server descriptions.\n" + "shutdown Shut the IcePack server down.\n"; } void @@ -54,8 +53,7 @@ IcePack::Parser::add(const list& args) { if (args.empty()) { - error("`add' requires at least a proxy argument\n" - "(type `help' for more info)"); + error("`add' requires at least one argument (type `help' for more info)"); return; } @@ -87,8 +85,7 @@ IcePack::Parser::remove(const list& args) { if (args.size() != 1) { - error("`remove' requires exactly one proxy argument\n" - "(type `help' for more info)"); + error("`remove' requires exactly one argument (type `help' for more info)"); return; } diff --git a/cpp/src/IcePack/Server.cpp b/cpp/src/IcePack/Server.cpp index d9e35785e68..0af2b57fec3 100644 --- a/cpp/src/IcePack/Server.cpp +++ b/cpp/src/IcePack/Server.cpp @@ -58,16 +58,19 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator) PropertiesPtr properties = communicator->getProperties(); - string adminEndpoints = properties->getProperty("Ice.Adapter.Admin.Endpoints"); - if (adminEndpoints.length() != 0 && !nowarn) + const char* adminEndpointsProperty = "Ice.Adapter.Admin.Endpoints"; + string adminEndpoints = properties->getProperty(adminEndpointsProperty); + if (!adminEndpoints.empty() && !nowarn) { - cerr << argv[0] << ": warning: administrative endpoints `Ice.Adapter.Admin.Endpoints' enabled" << endl; + cerr << argv[0] << ": warning: administrative endpoints property `" << adminEndpointsProperty << "' enabled" + << endl; } - string forwardEndpoints = properties->getProperty("Ice.Adapter.Forward.Endpoints"); - if (forwardEndpoints.length() == 0) + const char* forwardEndpointsProperty = "Ice.Adapter.Forward.Endpoints"; + string forwardEndpoints = properties->getProperty(forwardEndpointsProperty); + if (forwardEndpoints.empty()) { - cerr << argv[0] << ": `Ice.Adapter.Forward.Endpoints' property is not set" << endl; + cerr << argv[0] << ": property `" << forwardEndpointsProperty << "' is not set" << endl; return EXIT_FAILURE; } -- cgit v1.2.3