From 1d016a6cebf9d1e366cd2295919bc9c5bfd9dbf9 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 16 Mar 2010 13:33:49 +0000 Subject: [PATCH] added proper close for file transfers. This drops down the number of FDs from 250 to ... 50 svn status git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5.0@2562 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/ft/ftcontroller.cc | 1 + libretroshare/src/ft/ftfilecreator.cc | 54 ++++++++++----------------- libretroshare/src/ft/ftfilecreator.h | 2 +- 3 files changed, 21 insertions(+), 36 deletions(-) diff --git a/libretroshare/src/ft/ftcontroller.cc b/libretroshare/src/ft/ftcontroller.cc index 8915517a1..9b82888b3 100644 --- a/libretroshare/src/ft/ftcontroller.cc +++ b/libretroshare/src/ft/ftcontroller.cc @@ -727,6 +727,7 @@ bool ftController::completeFile(std::string hash) if (fc->mCreator) { + fc->mCreator->closeFile() ; delete fc->mCreator; fc->mCreator = NULL; } diff --git a/libretroshare/src/ft/ftfilecreator.cc b/libretroshare/src/ft/ftfilecreator.cc index 126ff846b..6f19c7e96 100644 --- a/libretroshare/src/ft/ftfilecreator.cc +++ b/libretroshare/src/ft/ftfilecreator.cc @@ -88,12 +88,12 @@ bool ftFileCreator::addFileData(uint64_t offset, uint32_t chunk_size, void *data /* dodgey checking outside of mutex... much check again inside FileAttrs(). */ /* Check File is open */ - if (fd == NULL) - if (!initializeFileAttrs()) - return false; - RsStackMutex stack(ftcMutex); /********** STACK LOCKED MTX ******/ + if (fd == NULL) + if (!locked_initializeFileAttrs()) + return false; + /* * check its at the correct location */ @@ -186,36 +186,35 @@ void ftFileCreator::removeFileSource(const std::string& peer_id) chunkMap.removeFileSource(peer_id) ; } -int ftFileCreator::initializeFileAttrs() +int ftFileCreator::locked_initializeFileAttrs() { - #ifdef FILE_DEBUG - std::cerr << "ftFileCreator::initializeFileAttrs() Filename: " << file_name << " this: " << this << std::endl; - #endif +#ifdef FILE_DEBUG + std::cerr << "ftFileCreator::initializeFileAttrs() Filename: " << file_name << " this: " << this << std::endl; +#endif /* - * check if the file exists + * check if the file exists * cant use FileProviders verion because that opens readonly. - */ + */ - RsStackMutex stack(ftcMutex); /********** STACK LOCKED MTX ******/ if (fd) return 1; /* - * check if the file exists - */ - + * check if the file exists + */ + { - #ifdef FILE_DEBUG - std::cerr << "ftFileCreator::initializeFileAttrs() trying (r+b) " << file_name << " this: " << this << std::endl; - #endif +#ifdef FILE_DEBUG + std::cerr << "ftFileCreator::initializeFileAttrs() trying (r+b) " << file_name << " this: " << this << std::endl; +#endif std::cerr << std::endl; } /* - * attempt to open file - */ - + * attempt to open file + */ + fd = fopen64(file_name.c_str(), "r+b"); if (!fd) @@ -235,21 +234,6 @@ int ftFileCreator::initializeFileAttrs() return 0; } } - - - - - /* - * if it opened, find it's length - * move to the end - */ - -// if (0 != fseeko64(fd, 0L, SEEK_END)) -// { -// std::cerr << "ftFileCreator::initializeFileAttrs() Seek Failed" << std::endl; -// return 0; -// } - #ifdef FILE_DEBUG std::cerr << "ftFileCreator::initializeFileAttrs() File Expected Size: " << mSize << " RecvdSize: " << recvdsize << std::endl; #endif diff --git a/libretroshare/src/ft/ftfilecreator.h b/libretroshare/src/ft/ftfilecreator.h index b11710ce7..88b3f7941 100644 --- a/libretroshare/src/ft/ftfilecreator.h +++ b/libretroshare/src/ft/ftfilecreator.h @@ -98,7 +98,7 @@ class ftFileCreator: public ftFileProvider protected: - virtual int initializeFileAttrs(); + virtual int locked_initializeFileAttrs(); private: