summaryrefslogtreecommitdiff
path: root/indra/llvfs/lllfsthread.cpp
diff options
context:
space:
mode:
authorCallum Prentice <callum@gmail.com>2020-09-16 18:53:24 -0700
committerCallum Prentice <callum@gmail.com>2020-09-16 18:53:24 -0700
commit3fc07dea01795b31c37dcd093ec73d190a1e188a (patch)
treeb000b56002957e5d0367aa87f0b03b8827181474 /indra/llvfs/lllfsthread.cpp
parent060dd2aeab72df26d6375f2e0fad619113fe7e13 (diff)
First part of change to remove LLVFS from the Viewer. Consists of code changes to remove LLVFS and LLVFSThread classes along with the associated source files. The existing llvfs folder is renamed to llcache. Also includes changes to CMake script in many places to reflect changes. Eventually, llvfile source file and class will be renamed but that is not in this change.
Diffstat (limited to 'indra/llvfs/lllfsthread.cpp')
-rw-r--r--indra/llvfs/lllfsthread.cpp245
1 files changed, 0 insertions, 245 deletions
diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp
deleted file mode 100644
index be8e83a56f..0000000000
--- a/indra/llvfs/lllfsthread.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * @file lllfsthread.cpp
- * @brief LLLFSThread base class
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-#include "lllfsthread.h"
-#include "llstl.h"
-#include "llapr.h"
-
-//============================================================================
-
-/*static*/ LLLFSThread* LLLFSThread::sLocal = NULL;
-
-//============================================================================
-// Run on MAIN thread
-//static
-void LLLFSThread::initClass(bool local_is_threaded)
-{
- llassert(sLocal == NULL);
- sLocal = new LLLFSThread(local_is_threaded);
-}
-
-//static
-S32 LLLFSThread::updateClass(U32 ms_elapsed)
-{
- sLocal->update((F32)ms_elapsed);
- return sLocal->getPending();
-}
-
-//static
-void LLLFSThread::cleanupClass()
-{
- llassert(sLocal != NULL);
- sLocal->setQuitting();
- while (sLocal->getPending())
- {
- sLocal->update(0);
- }
- delete sLocal;
- sLocal = NULL;
-}
-
-//----------------------------------------------------------------------------
-
-LLLFSThread::LLLFSThread(bool threaded) :
- LLQueuedThread("LFS", threaded),
- mPriorityCounter(PRIORITY_LOWBITS)
-{
- if(!mLocalAPRFilePoolp)
- {
- mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
- }
-}
-
-LLLFSThread::~LLLFSThread()
-{
- // mLocalAPRFilePoolp cleanup in LLThread
- // ~LLQueuedThread() will be called here
-}
-
-//----------------------------------------------------------------------------
-
-LLLFSThread::handle_t LLLFSThread::read(const std::string& filename, /* Flawfinder: ignore */
- U8* buffer, S32 offset, S32 numbytes,
- Responder* responder, U32 priority)
-{
- handle_t handle = generateHandle();
-
- if (priority == 0) priority = PRIORITY_NORMAL | priorityCounter();
- else if (priority < PRIORITY_LOW) priority |= PRIORITY_LOW; // All reads are at least PRIORITY_LOW
-
- Request* req = new Request(this, handle, priority,
- FILE_READ, filename,
- buffer, offset, numbytes,
- responder);
-
- bool res = addRequest(req);
- if (!res)
- {
- LL_ERRS() << "LLLFSThread::read called after LLLFSThread::cleanupClass()" << LL_ENDL;
- }
-
- return handle;
-}
-
-LLLFSThread::handle_t LLLFSThread::write(const std::string& filename,
- U8* buffer, S32 offset, S32 numbytes,
- Responder* responder, U32 priority)
-{
- handle_t handle = generateHandle();
-
- if (priority == 0) priority = PRIORITY_LOW | priorityCounter();
-
- Request* req = new Request(this, handle, priority,
- FILE_WRITE, filename,
- buffer, offset, numbytes,
- responder);
-
- bool res = addRequest(req);
- if (!res)
- {
- LL_ERRS() << "LLLFSThread::read called after LLLFSThread::cleanupClass()" << LL_ENDL;
- }
-
- return handle;
-}
-
-//============================================================================
-
-LLLFSThread::Request::Request(LLLFSThread* thread,
- handle_t handle, U32 priority,
- operation_t op, const std::string& filename,
- U8* buffer, S32 offset, S32 numbytes,
- Responder* responder) :
- QueuedRequest(handle, priority, FLAG_AUTO_COMPLETE),
- mThread(thread),
- mOperation(op),
- mFileName(filename),
- mBuffer(buffer),
- mOffset(offset),
- mBytes(numbytes),
- mBytesRead(0),
- mResponder(responder)
-{
- if (numbytes <= 0)
- {
- LL_WARNS() << "LLLFSThread: Request with numbytes = " << numbytes << LL_ENDL;
- }
-}
-
-LLLFSThread::Request::~Request()
-{
-}
-
-// virtual, called from own thread
-void LLLFSThread::Request::finishRequest(bool completed)
-{
- if (mResponder.notNull())
- {
- mResponder->completed(completed ? mBytesRead : 0);
- mResponder = NULL;
- }
-}
-
-void LLLFSThread::Request::deleteRequest()
-{
- if (getStatus() == STATUS_QUEUED)
- {
- LL_ERRS() << "Attempt to delete a queued LLLFSThread::Request!" << LL_ENDL;
- }
- if (mResponder.notNull())
- {
- mResponder->completed(0);
- mResponder = NULL;
- }
- LLQueuedThread::QueuedRequest::deleteRequest();
-}
-
-bool LLLFSThread::Request::processRequest()
-{
- bool complete = false;
- if (mOperation == FILE_READ)
- {
- llassert(mOffset >= 0);
- LLAPRFile infile ; // auto-closes
- infile.open(mFileName, LL_APR_RB, mThread->getLocalAPRFilePool());
- if (!infile.getFileHandle())
- {
- LL_WARNS() << "LLLFS: Unable to read file: " << mFileName << LL_ENDL;
- mBytesRead = 0; // fail
- return true;
- }
- S32 off;
- if (mOffset < 0)
- off = infile.seek(APR_END, 0);
- else
- off = infile.seek(APR_SET, mOffset);
- llassert_always(off >= 0);
- mBytesRead = infile.read(mBuffer, mBytes );
- complete = true;
-// LL_INFOS() << "LLLFSThread::READ:" << mFileName << " Bytes: " << mBytesRead << LL_ENDL;
- }
- else if (mOperation == FILE_WRITE)
- {
- apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY;
- if (mOffset < 0)
- flags |= APR_APPEND;
- LLAPRFile outfile ; // auto-closes
- outfile.open(mFileName, flags, mThread->getLocalAPRFilePool());
- if (!outfile.getFileHandle())
- {
- LL_WARNS() << "LLLFS: Unable to write file: " << mFileName << LL_ENDL;
- mBytesRead = 0; // fail
- return true;
- }
- if (mOffset >= 0)
- {
- S32 seek = outfile.seek(APR_SET, mOffset);
- if (seek < 0)
- {
- LL_WARNS() << "LLLFS: Unable to write file (seek failed): " << mFileName << LL_ENDL;
- mBytesRead = 0; // fail
- return true;
- }
- }
- mBytesRead = outfile.write(mBuffer, mBytes );
- complete = true;
-// LL_INFOS() << "LLLFSThread::WRITE:" << mFileName << " Bytes: " << mBytesRead << "/" << mBytes << " Offset:" << mOffset << LL_ENDL;
- }
- else
- {
- LL_ERRS() << "LLLFSThread::unknown operation: " << (S32)mOperation << LL_ENDL;
- }
- return complete;
-}
-
-//============================================================================
-
-LLLFSThread::Responder::~Responder()
-{
-}
-
-//============================================================================