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
This commit is contained in:
csoler 2010-03-16 13:33:49 +00:00
parent a914e463d3
commit 1d016a6ceb
3 changed files with 21 additions and 36 deletions

View File

@ -727,6 +727,7 @@ bool ftController::completeFile(std::string hash)
if (fc->mCreator)
{
fc->mCreator->closeFile() ;
delete fc->mCreator;
fc->mCreator = NULL;
}

View File

@ -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

View File

@ -98,7 +98,7 @@ class ftFileCreator: public ftFileProvider
protected:
virtual int initializeFileAttrs();
virtual int locked_initializeFileAttrs();
private: