diff options
| author | randomdan <randomdan@localhost> | 2014-05-01 00:16:47 +0000 | 
|---|---|---|
| committer | randomdan <randomdan@localhost> | 2014-05-01 00:16:47 +0000 | 
| commit | c078774faf086e7e9985d276bab0b63d082b40da (patch) | |
| tree | 16744398d2a7005b06261cbf65bc73454e785b34 | |
| parent | Whoops, add file offset bits definition to fix 64bit compat bug (diff) | |
| download | netfs-c078774faf086e7e9985d276bab0b63d082b40da.tar.bz2 netfs-c078774faf086e7e9985d276bab0b63d082b40da.tar.xz netfs-c078774faf086e7e9985d276bab0b63d082b40da.zip | |
Use IceUtil::Shared/Handle, which is already thread safe, instead of boost::intrusive_ptr and IntrusivePtrBase, which isn't, to undo the mess introduced in 937 to enforce thread safety
| -rw-r--r-- | netfs/daemon/daemonConfig.cpp | 6 | ||||
| -rw-r--r-- | netfs/daemon/daemonConfig.h | 18 | ||||
| -rw-r--r-- | netfs/fuse/fuse.h | 9 | ||||
| -rw-r--r-- | netfs/fuse/fuseConfig.h | 13 | ||||
| -rw-r--r-- | netfs/fuse/fuseDirs.cpp | 13 | ||||
| -rw-r--r-- | netfs/fuse/fuseFiles.cpp | 31 | ||||
| -rw-r--r-- | netfs/lib/pch.hpp | 2 | 
7 files changed, 34 insertions, 58 deletions
| diff --git a/netfs/daemon/daemonConfig.cpp b/netfs/daemon/daemonConfig.cpp index 7f171eb..7f75900 100644 --- a/netfs/daemon/daemonConfig.cpp +++ b/netfs/daemon/daemonConfig.cpp @@ -10,6 +10,12 @@ myHostname()  	return buf;  } +bool +DaemonConfig::Host::operator<(const DaemonConfig::Host & other) const +{ +	return (this->name < other.name); +} +  DaemonConfigPtr  DaemonConfig::Load(const std::string & path)  { diff --git a/netfs/daemon/daemonConfig.h b/netfs/daemon/daemonConfig.h index f27aedb..c4513cb 100644 --- a/netfs/daemon/daemonConfig.h +++ b/netfs/daemon/daemonConfig.h @@ -4,26 +4,26 @@  #include <string>  #include <map>  #include <set> -#include <intrusivePtrBase.h> -#include <boost/intrusive_ptr.hpp> +#include <IceUtil/Shared.h>  #include <boost/filesystem/path.hpp>  #include "xml.h" -class DaemonConfig : public virtual IntrusivePtrBase { +class DaemonConfig : public IceUtil::Shared {  	public: -		class Host : public virtual IntrusivePtrBase { +		class Host : public IceUtil::Shared {  			public:  				Host(xmlNodePtr);  				std::string		iceEndpoint;  				std::string		name;  				bool			self; +				bool operator<(const Host &) const;  		}; -		typedef boost::intrusive_ptr<Host> HostPtr; +		typedef IceUtil::Handle<Host> HostPtr;  		typedef std::map<std::string, HostPtr> HostMap;  		typedef std::set<HostPtr> HostSet; -		class Export : public virtual IntrusivePtrBase { +		class Export : public IceUtil::Shared {  			public:  				Export(xmlNodePtr, const HostMap &); @@ -31,18 +31,18 @@ class DaemonConfig : public virtual IntrusivePtrBase {  				std::string name;  				HostSet replicate;  		}; -		typedef boost::intrusive_ptr<Export> ExportPtr; +		typedef IceUtil::Handle<Export> ExportPtr;  		typedef std::map<std::string, ExportPtr> ExportMap;  		DaemonConfig(xmlNodePtr); -		static boost::intrusive_ptr<DaemonConfig> Load(const std::string & path); +		static IceUtil::Handle<DaemonConfig> Load(const std::string & path);  		ExportMap		exports;  		HostMap			hosts;  		HostPtr			self;  }; -typedef boost::intrusive_ptr<DaemonConfig> DaemonConfigPtr; +typedef IceUtil::Handle<DaemonConfig> DaemonConfigPtr;  #endif diff --git a/netfs/fuse/fuse.h b/netfs/fuse/fuse.h index 033d7fa..0b9e10e 100644 --- a/netfs/fuse/fuse.h +++ b/netfs/fuse/fuse.h @@ -7,7 +7,6 @@  #include "fuseapp.h"  #include "fuseConfig.h"  #include "entCache.h" -#include "intrusivePtrBase.h"  #define LOCK boost::unique_lock<boost::shared_mutex> _lck(_lock)  #define SLOCK boost::shared_lock<boost::shared_mutex> _lck(_lock) @@ -15,17 +14,17 @@  namespace NetFS {  	class FuseApp : public FuseAppBase {  		private: -			class OpenDir : public IntrusivePtrBase { +			class OpenDir : public IceUtil::Shared {  				public:  					OpenDir(DirectoryPrx remote, const std::string & path);  					DirectoryPrx remote;  					const std::string path;  			}; -			typedef boost::intrusive_ptr<OpenDir> OpenDirPtr; +			typedef IceUtil::Handle<OpenDir> OpenDirPtr;  			typedef std::map<int, OpenDirPtr> OpenDirs; -			class OpenFile : public IntrusivePtrBase { +			class OpenFile : public IceUtil::Shared {  				public:  					OpenFile(FilePrx remote, const std::string & path, int flags); @@ -33,7 +32,7 @@ namespace NetFS {  					const std::string path;  					const int flags;  			}; -			typedef boost::intrusive_ptr<OpenFile> OpenFilePtr; +			typedef IceUtil::Handle<OpenFile> OpenFilePtr;  			typedef std::map<int, OpenFilePtr> OpenFiles;  		public: diff --git a/netfs/fuse/fuseConfig.h b/netfs/fuse/fuseConfig.h index f33c8f7..32f25b4 100644 --- a/netfs/fuse/fuseConfig.h +++ b/netfs/fuse/fuseConfig.h @@ -4,16 +4,15 @@  #include <string>  #include <map>  #include <set> -#include <intrusivePtrBase.h> -#include <boost/intrusive_ptr.hpp> +#include <IceUtil/Shared.h>  #include "xml.h" -class FuseConfig : public virtual IntrusivePtrBase { +class FuseConfig : public IceUtil::Shared {  	public:  		class Export; -		typedef boost::intrusive_ptr<Export> ExportPtr; +		typedef IceUtil::Handle<Export> ExportPtr;  		typedef std::map<std::string, ExportPtr> ExportMap; -		class Export : public virtual IntrusivePtrBase { +		class Export : public IceUtil::Shared {  			public:  				typedef std::set<std::string> Endpoints;  				Export(xmlNodePtr); @@ -23,11 +22,11 @@ class FuseConfig : public virtual IntrusivePtrBase {  		};  		FuseConfig(xmlNodePtr); -		static boost::intrusive_ptr<FuseConfig>	Load(const std::string & path); +		static IceUtil::Handle<FuseConfig>	Load(const std::string & path);  		ExportMap		exports;  }; -typedef boost::intrusive_ptr<FuseConfig> FuseConfigPtr; +typedef IceUtil::Handle<FuseConfig> FuseConfigPtr;  #endif diff --git a/netfs/fuse/fuseDirs.cpp b/netfs/fuse/fuseDirs.cpp index 216d032..fac70a6 100644 --- a/netfs/fuse/fuseDirs.cpp +++ b/netfs/fuse/fuseDirs.cpp @@ -19,6 +19,7 @@ NetFS::FuseApp::setProxy(OpenDirPtr od, uint64_t & fh)  NetFS::FuseApp::OpenDirPtr  NetFS::FuseApp::getDirProxy(uint64_t localID) const  { +	SLOCK;  	OpenDirs::const_iterator i = openDirs.find(localID);  	if (i != openDirs.end()) {  		return i->second; @@ -50,11 +51,7 @@ int  NetFS::FuseApp::releasedir(const char *, struct fuse_file_info * fi)  {  	try { -		DirectoryPrx remote; -		{ -			LOCK; -			remote = getDirProxy(fi->fh)->remote; -		} +		auto remote = getDirProxy(fi->fh)->remote;  		remote->close();  		clearDirProxy(fi->fh);  		return 0; @@ -68,11 +65,7 @@ int  NetFS::FuseApp::readdir(const char *, void * buf, fuse_fill_dir_t filler, off_t, struct fuse_file_info * fi)  {  	try { -		DirectoryPrx remote; -		{ -			LOCK; -			remote = getDirProxy(fi->fh)->remote; -		} +		auto remote = getDirProxy(fi->fh)->remote;  		NetFS::NameList ds = remote->readdir();  		BOOST_FOREACH(const auto & e, ds) {  			filler(buf, e.c_str(), NULL, 0); diff --git a/netfs/fuse/fuseFiles.cpp b/netfs/fuse/fuseFiles.cpp index c8d2495..4a96e51 100644 --- a/netfs/fuse/fuseFiles.cpp +++ b/netfs/fuse/fuseFiles.cpp @@ -21,6 +21,7 @@ NetFS::FuseApp::setProxy(OpenFilePtr of, uint64_t & fh)  NetFS::FuseApp::OpenFilePtr  NetFS::FuseApp::getFileProxy(uint64_t localID) const  { +	SLOCK;  	OpenFiles::const_iterator i = openFiles.find(localID);  	if (i != openFiles.end()) {  		return i->second; @@ -65,11 +66,7 @@ int  NetFS::FuseApp::release(const char *, struct fuse_file_info * fi)  {  	try { -		FilePrx remote; -		{ -			LOCK; -			remote = getFileProxy(fi->fh)->remote; -		} +		auto remote = getFileProxy(fi->fh)->remote;  		remote->close();  		clearFileProxy(fi->fh);  		return 0; @@ -83,11 +80,7 @@ int  NetFS::FuseApp::read(const char *, char * buf, size_t s, off_t o, struct fuse_file_info * fi)  {  	try { -		FilePrx remote; -		{ -			LOCK; -			remote = getFileProxy(fi->fh)->remote; -		} +		auto remote = getFileProxy(fi->fh)->remote;  		NetFS::Buffer data = remote->read(o, s);  		memcpy(buf, &data.front(), data.size());  		return data.size(); @@ -101,11 +94,7 @@ int  NetFS::FuseApp::write(const char *, const char * buf, size_t s, off_t o, struct fuse_file_info * fi)  {  	try { -		FilePrx remote; -		{ -			LOCK; -			remote = getFileProxy(fi->fh)->remote; -		} +		auto remote = getFileProxy(fi->fh)->remote;  		remote->write(o, s, NetFS::Buffer(buf, buf + s));  		return s;  	} @@ -130,11 +119,7 @@ int  NetFS::FuseApp::ftruncate(const char *, off_t o, fuse_file_info * fi)  {  	try { -		FilePrx remote; -		{ -			LOCK; -			remote = getFileProxy(fi->fh)->remote; -		} +		auto remote = getFileProxy(fi->fh)->remote;  		remote->ftruncate(reqEnv(), o);  		return 0;  	} @@ -147,11 +132,7 @@ int  NetFS::FuseApp::fgetattr(const char *, struct stat * s, fuse_file_info * fi)  {  	try { -		FilePrx remote; -		{ -			LOCK; -			remote = getFileProxy(fi->fh)->remote; -		} +		auto remote = getFileProxy(fi->fh)->remote;  		*s << AttrSource { remote->fgetattr(reqEnv()), boost::bind(&UserEntCache::getID, &uentries, _1), boost::bind(&GroupEntCache::getID, &gentries, _1) };  		return 0;  	} diff --git a/netfs/lib/pch.hpp b/netfs/lib/pch.hpp index e5ee5d7..bfa768e 100644 --- a/netfs/lib/pch.hpp +++ b/netfs/lib/pch.hpp @@ -3,14 +3,12 @@  #define NETFS_PCH  #include <boost/foreach.hpp> -#include <boost/intrusive_ptr.hpp>  #include <boost/thread/locks.hpp>  #include <boost/thread/mutex.hpp>  #include <boost/thread/shared_mutex.hpp>  #include <boost/tuple/tuple.hpp>  #include <exception>  #include <Ice/Ice.h> -#include <intrusivePtrBase.h>  #include <map>  #include <set>  #include <string> | 
