diff options
| -rw-r--r-- | project2/sessionShm.cpp | 25 | 
1 files changed, 18 insertions, 7 deletions
| diff --git a/project2/sessionShm.cpp b/project2/sessionShm.cpp index e4c9d16..8064142 100644 --- a/project2/sessionShm.cpp +++ b/project2/sessionShm.cpp @@ -24,13 +24,14 @@ class SessionShmData {  		SessionValues svs;  		time_t expiryTime; -		static boost::interprocess::managed_mapped_file shm; +		static boost::interprocess::managed_mapped_file & shm(); +		static boost::shared_ptr<boost::interprocess::managed_mapped_file> _shm;  		friend class SessionContainerShm;  };  const char * shmFile = "/tmp/project2.sessions"; -boost::interprocess::managed_mapped_file SessionShmData::shm(open_or_create, shmFile, 1024 * 1024); +boost::shared_ptr<boost::interprocess::managed_mapped_file> SessionShmData::_shm;  SessionContainerShm::SessionContainerShm()  { @@ -44,8 +45,8 @@ void  SessionContainerShm::CleanUp()  {  	std::set<std::string> toDelete; -	for (managed_mapped_file::const_named_iterator i = SessionShmData::shm.named_begin(); -			i != SessionShmData::shm.named_end(); i++) { +	for (managed_mapped_file::const_named_iterator i = SessionShmData::shm().named_begin(); +			i != SessionShmData::shm().named_end(); i++) {  		const SessionShmData * s = static_cast<const SessionShmData *>(i->value());  		if (s) {  			if (s->expiryTime < time(NULL)) { @@ -54,7 +55,7 @@ SessionContainerShm::CleanUp()  		}  	}  	for(std::set<std::string>::const_iterator s = toDelete.begin(); s != toDelete.end(); s++) { -		SessionShmData::shm.destroy<const SessionShmData>(s->c_str()); +		SessionShmData::shm().destroy<const SessionShmData>(s->c_str());  	}  } @@ -65,7 +66,7 @@ SessionContainerShm::getSession(boost::uuids::uuid & sid)  		sid = boost::uuids::random_generator()();  	}  	return SessionPtr(new SessionShm( -			SessionShmData::shm.find_or_construct<SessionShmData>(boost::lexical_cast<std::string>(sid).c_str())())); +			SessionShmData::shm().find_or_construct<SessionShmData>(boost::lexical_cast<std::string>(sid).c_str())()));  }  SessionShm::SessionShm(SessionShmData * d) : data(d) @@ -89,7 +90,7 @@ SessionShm::ExpiryTime() const  }  SessionShmData::SessionShmData() : -	svs(std::less<SKey>(), AllocatorValueType(shm.get_segment_manager())) +	svs(std::less<SKey>(), AllocatorValueType(shm().get_segment_manager()))  {  } @@ -97,6 +98,16 @@ SessionShmData::~SessionShmData()  {  } +boost::interprocess::managed_mapped_file & +SessionShmData::shm() +{ +	if (!_shm) { +		_shm = boost::shared_ptr<boost::interprocess::managed_mapped_file>( +				new boost::interprocess::managed_mapped_file(open_or_create, shmFile, 1024 * 1024)); +	} +	return *_shm; +} +  Glib::ustring  SessionShm::GetValue(const Glib::ustring & name) const  { | 
