summaryrefslogtreecommitdiff
path: root/indra/llmessage/llpumpio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llmessage/llpumpio.cpp')
-rwxr-xr-x[-rw-r--r--]indra/llmessage/llpumpio.cpp219
1 files changed, 117 insertions, 102 deletions
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index a8d2a0a224..506ccc98a4 100644..100755
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -34,9 +34,8 @@
#include "apr_poll.h"
#include "llapr.h"
-#include "llmemtype.h"
+#include "llfasttimer.h"
#include "llstl.h"
-#include "llstat.h"
// These should not be enabled in production, but they can be
// intensely useful during development for finding certain kinds of
@@ -83,7 +82,7 @@ void ll_debug_poll_fd(const char* msg, const apr_pollfd_t* poll)
#if LL_DEBUG_POLL_FILE_DESCRIPTORS
if(!poll)
{
- lldebugs << "Poll -- " << (msg?msg:"") << ": no pollfd." << llendl;
+ LL_DEBUGS() << "Poll -- " << (msg?msg:"") << ": no pollfd." << LL_ENDL;
return;
}
if(poll->desc.s)
@@ -91,13 +90,13 @@ void ll_debug_poll_fd(const char* msg, const apr_pollfd_t* poll)
apr_os_sock_t os_sock;
if(APR_SUCCESS == apr_os_sock_get(&os_sock, poll->desc.s))
{
- lldebugs << "Poll -- " << (msg?msg:"") << " on fd " << os_sock
- << " at " << poll->desc.s << llendl;
+ LL_DEBUGS() << "Poll -- " << (msg?msg:"") << " on fd " << os_sock
+ << " at " << poll->desc.s << LL_ENDL;
}
else
{
- lldebugs << "Poll -- " << (msg?msg:"") << " no fd "
- << " at " << poll->desc.s << llendl;
+ LL_DEBUGS() << "Poll -- " << (msg?msg:"") << " no fd "
+ << " at " << poll->desc.s << LL_ENDL;
}
}
else if(poll->desc.f)
@@ -105,18 +104,18 @@ void ll_debug_poll_fd(const char* msg, const apr_pollfd_t* poll)
apr_os_file_t os_file;
if(APR_SUCCESS == apr_os_file_get(&os_file, poll->desc.f))
{
- lldebugs << "Poll -- " << (msg?msg:"") << " on fd " << os_file
- << " at " << poll->desc.f << llendl;
+ LL_DEBUGS() << "Poll -- " << (msg?msg:"") << " on fd " << os_file
+ << " at " << poll->desc.f << LL_ENDL;
}
else
{
- lldebugs << "Poll -- " << (msg?msg:"") << " no fd "
- << " at " << poll->desc.f << llendl;
+ LL_DEBUGS() << "Poll -- " << (msg?msg:"") << " no fd "
+ << " at " << poll->desc.f << LL_ENDL;
}
}
else
{
- lldebugs << "Poll -- " << (msg?msg:"") << ": no descriptor." << llendl;
+ LL_DEBUGS() << "Poll -- " << (msg?msg:"") << ": no descriptor." << LL_ENDL;
}
#endif
}
@@ -153,7 +152,6 @@ struct ll_delete_apr_pollset_fd_client_data
typedef std::pair<LLIOPipe::ptr_t, apr_pollfd_t> pipe_conditional_t;
void operator()(const pipe_conditional_t& conditional)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
S32* client_id = (S32*)conditional.second.client_data;
delete client_id;
}
@@ -177,41 +175,39 @@ LLPumpIO::LLPumpIO(apr_pool_t* pool) :
{
mCurrentChain = mRunningChains.end();
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
initialize(pool);
}
LLPumpIO::~LLPumpIO()
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
cleanup();
}
bool LLPumpIO::prime(apr_pool_t* pool)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
cleanup();
initialize(pool);
return ((pool == NULL) ? false : true);
}
-bool LLPumpIO::addChain(const chain_t& chain, F32 timeout)
+bool LLPumpIO::addChain(const chain_t& chain, F32 timeout, bool has_curl_request)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(chain.empty()) return false;
#if LL_THREADS_APR
LLScopedLock lock(mChainsMutex);
#endif
LLChainInfo info;
+ info.mHasCurlRequest = has_curl_request;
info.setTimeoutSeconds(timeout);
info.mData = LLIOPipe::buffer_ptr_t(new LLBufferArray);
+ info.mData->setThreaded(has_curl_request);
LLLinkInfo link;
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
- lldebugs << "LLPumpIO::addChain() " << chain[0] << " '"
- << typeid(*(chain[0])).name() << "'" << llendl;
+ LL_DEBUGS() << "LLPumpIO::addChain() " << chain[0] << " '"
+ << typeid(*(chain[0])).name() << "'" << LL_ENDL;
#else
- lldebugs << "LLPumpIO::addChain() " << chain[0] <<llendl;
+ LL_DEBUGS() << "LLPumpIO::addChain() " << chain[0] <<LL_ENDL;
#endif
chain_t::const_iterator it = chain.begin();
chain_t::const_iterator end = chain.end();
@@ -231,7 +227,6 @@ bool LLPumpIO::addChain(
LLSD context,
F32 timeout)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
// remember that if the caller is providing a full link
// description, we need to have that description matched to a
@@ -243,10 +238,10 @@ bool LLPumpIO::addChain(
LLScopedLock lock(mChainsMutex);
#endif
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
- lldebugs << "LLPumpIO::addChain() " << links[0].mPipe << " '"
- << typeid(*(links[0].mPipe)).name() << "'" << llendl;
+ LL_DEBUGS() << "LLPumpIO::addChain() " << links[0].mPipe << " '"
+ << typeid(*(links[0].mPipe)).name() << "'" << LL_ENDL;
#else
- lldebugs << "LLPumpIO::addChain() " << links[0].mPipe << llendl;
+ LL_DEBUGS() << "LLPumpIO::addChain() " << links[0].mPipe << LL_ENDL;
#endif
LLChainInfo info;
info.setTimeoutSeconds(timeout);
@@ -309,16 +304,15 @@ static std::string events_2_string(apr_int16_t events)
bool LLPumpIO::setConditional(LLIOPipe* pipe, const apr_pollfd_t* poll)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(!pipe) return false;
ll_debug_poll_fd("Set conditional", poll);
- lldebugs << "Setting conditionals (" << (poll ? events_2_string(poll->reqevents) :"null")
+ LL_DEBUGS() << "Setting conditionals (" << (poll ? events_2_string(poll->reqevents) :"null")
<< ") "
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
<< "on pipe " << typeid(*pipe).name()
#endif
- << " at " << pipe << llendl;
+ << " at " << pipe << LL_ENDL;
// remove any matching poll file descriptors for this pipe.
LLIOPipe::ptr_t pipe_ptr(pipe);
@@ -421,7 +415,6 @@ bool LLPumpIO::sleepChain(F64 seconds)
bool LLPumpIO::copyCurrentLinkInfo(links_t& links) const
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(mRunningChains.end() == mCurrentChain)
{
return false;
@@ -438,14 +431,23 @@ void LLPumpIO::pump()
pump(DEFAULT_POLL_TIMEOUT);
}
-static LLFastTimer::DeclareTimer FTM_PUMP_IO("Pump IO");
+static LLTrace::BlockTimerStatHandle FTM_PUMP_IO("Pump IO");
+static LLTrace::BlockTimerStatHandle FTM_PUMP_POLL("Pump Poll");
+
+LLPumpIO::current_chain_t LLPumpIO::removeRunningChain(LLPumpIO::current_chain_t& run_chain)
+{
+ std::for_each(
+ (*run_chain).mDescriptors.begin(),
+ (*run_chain).mDescriptors.end(),
+ ll_delete_apr_pollset_fd_client_data());
+ return mRunningChains.erase(run_chain);
+}
//timeout is in microseconds
void LLPumpIO::pump(const S32& poll_timeout)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- LLFastTimer t1(FTM_PUMP_IO);
- //llinfos << "LLPumpIO::pump()" << llendl;
+ LL_RECORD_BLOCK_TIME(FTM_PUMP_IO);
+ //LL_INFOS() << "LLPumpIO::pump()" << LL_ENDL;
// Run any pending runners.
mRunner.run();
@@ -473,7 +475,7 @@ void LLPumpIO::pump(const S32& poll_timeout)
if(!mPendingChains.empty())
{
PUMP_DEBUG;
- //lldebugs << "Pushing " << mPendingChains.size() << "." << llendl;
+ //LL_DEBUGS() << "Pushing " << mPendingChains.size() << "." << LL_ENDL;
std::copy(
mPendingChains.begin(),
mPendingChains.end(),
@@ -521,11 +523,11 @@ void LLPumpIO::pump(const S32& poll_timeout)
if(mPollset)
{
PUMP_DEBUG;
- //llinfos << "polling" << llendl;
+ //LL_INFOS() << "polling" << LL_ENDL;
S32 count = 0;
S32 client_id = 0;
{
- LLPerfBlock polltime("pump_poll");
+ LL_RECORD_BLOCK_TIME(FTM_PUMP_POLL);
apr_pollset_poll(mPollset, poll_timeout, &count, &poll_fd);
}
PUMP_DEBUG;
@@ -543,7 +545,7 @@ void LLPumpIO::pump(const S32& poll_timeout)
signal_client_t::iterator not_signalled = signalled_client.end();
// Process everything as appropriate
- //lldebugs << "Running chain count: " << mRunningChains.size() << llendl;
+ //LL_DEBUGS() << "Running chain count: " << mRunningChains.size() << LL_ENDL;
running_chains_t::iterator run_chain = mRunningChains.begin();
bool process_this_chain = false;
while( run_chain != mRunningChains.end() )
@@ -563,9 +565,9 @@ void LLPumpIO::pump(const S32& poll_timeout)
&& (*run_chain).mTimer.hasExpired())
{
PUMP_DEBUG;
- llinfos << "Error handler forgot to reset timeout. "
+ LL_INFOS() << "Error handler forgot to reset timeout. "
<< "Resetting to " << DEFAULT_CHAIN_EXPIRY_SECS
- << " seconds." << llendl;
+ << " seconds." << LL_ENDL;
(*run_chain).setTimeoutSeconds(DEFAULT_CHAIN_EXPIRY_SECS);
}
}
@@ -575,20 +577,26 @@ void LLPumpIO::pump(const S32& poll_timeout)
// it timed out and no one handled it, so we need to
// retire the chain
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
- lldebugs << "Removing chain "
+ LL_DEBUGS() << "Removing chain "
<< (*run_chain).mChainLinks[0].mPipe
<< " '"
<< typeid(*((*run_chain).mChainLinks[0].mPipe)).name()
- << "' because it timed out." << llendl;
+ << "' because it timed out." << LL_ENDL;
#else
-// lldebugs << "Removing chain "
+// LL_DEBUGS() << "Removing chain "
// << (*run_chain).mChainLinks[0].mPipe
-// << " because we reached the end." << llendl;
+// << " because we reached the end." << LL_ENDL;
#endif
- run_chain = mRunningChains.erase(run_chain);
+ run_chain = removeRunningChain(run_chain);
continue;
}
}
+ else if(isChainExpired(*run_chain))
+ {
+ run_chain = removeRunningChain(run_chain);
+ continue;
+ }
+
PUMP_DEBUG;
if((*run_chain).mLock)
{
@@ -602,12 +610,12 @@ void LLPumpIO::pump(const S32& poll_timeout)
{
// if there are no conditionals, just process this chain.
process_this_chain = true;
- //lldebugs << "no conditionals - processing" << llendl;
+ //LL_DEBUGS() << "no conditionals - processing" << LL_ENDL;
}
else
{
PUMP_DEBUG;
- //lldebugs << "checking conditionals" << llendl;
+ //LL_DEBUGS() << "checking conditionals" << LL_ENDL;
// Check if this run chain was signalled. If any file
// descriptor is ready for something, then go ahead and
// process this chian.
@@ -647,7 +655,7 @@ void LLPumpIO::pump(const S32& poll_timeout)
error_status = LLIOPipe::STATUS_ERROR;
if(handleChainError(*run_chain, error_status)) break;
ll_debug_poll_fd("Removing pipe", poll);
- llwarns << "Removing pipe "
+ LL_WARNS() << "Removing pipe "
<< (*run_chain).mChainLinks[0].mPipe
<< " '"
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
@@ -656,7 +664,7 @@ void LLPumpIO::pump(const S32& poll_timeout)
#endif
<< "' because: "
<< events_2_string(poll->rtnevents)
- << llendl;
+ << LL_ENDL;
(*run_chain).mHead = (*run_chain).mChainLinks.end();
break;
}
@@ -684,23 +692,19 @@ void LLPumpIO::pump(const S32& poll_timeout)
if((*run_chain).mHead == (*run_chain).mChainLinks.end())
{
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
- lldebugs << "Removing chain " << (*run_chain).mChainLinks[0].mPipe
+ LL_DEBUGS() << "Removing chain " << (*run_chain).mChainLinks[0].mPipe
<< " '"
<< typeid(*((*run_chain).mChainLinks[0].mPipe)).name()
- << "' because we reached the end." << llendl;
+ << "' because we reached the end." << LL_ENDL;
#else
-// lldebugs << "Removing chain " << (*run_chain).mChainLinks[0].mPipe
-// << " because we reached the end." << llendl;
+// LL_DEBUGS() << "Removing chain " << (*run_chain).mChainLinks[0].mPipe
+// << " because we reached the end." << LL_ENDL;
#endif
PUMP_DEBUG;
// This chain is done. Clean up any allocated memory and
// erase the chain info.
- std::for_each(
- (*run_chain).mDescriptors.begin(),
- (*run_chain).mDescriptors.end(),
- ll_delete_apr_pollset_fd_client_data());
- run_chain = mRunningChains.erase(run_chain);
+ run_chain = removeRunningChain(run_chain);
// *NOTE: may not always need to rebuild the pollset.
mRebuildPollset = true;
@@ -734,7 +738,6 @@ void LLPumpIO::pump(const S32& poll_timeout)
bool LLPumpIO::respond(LLIOPipe* pipe)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(NULL == pipe) return false;
#if LL_THREADS_APR
@@ -753,7 +756,6 @@ bool LLPumpIO::respond(
LLIOPipe::buffer_ptr_t data,
LLSD context)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
// if the caller is providing a full link description, we need to
// have that description matched to a particular buffer.
if(!data) return false;
@@ -772,12 +774,11 @@ bool LLPumpIO::respond(
return true;
}
-static LLFastTimer::DeclareTimer FTM_PUMP_CALLBACK_CHAIN("Chain");
+static LLTrace::BlockTimerStatHandle FTM_PUMP_CALLBACK_CHAIN("Chain");
void LLPumpIO::callback()
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- //llinfos << "LLPumpIO::callback()" << llendl;
+ //LL_INFOS() << "LLPumpIO::callback()" << LL_ENDL;
if(true)
{
#if LL_THREADS_APR
@@ -795,7 +796,7 @@ void LLPumpIO::callback()
callbacks_t::iterator end = mCallbacks.end();
for(; it != end; ++it)
{
- LLFastTimer t(FTM_PUMP_CALLBACK_CHAIN);
+ LL_RECORD_BLOCK_TIME(FTM_PUMP_CALLBACK_CHAIN);
// it's always the first and last time for respone chains
(*it).mHead = (*it).mChainLinks.begin();
(*it).mInit = true;
@@ -827,7 +828,6 @@ void LLPumpIO::control(LLPumpIO::EControl op)
void LLPumpIO::initialize(apr_pool_t* pool)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(!pool) return;
#if LL_THREADS_APR
// SJB: Windows defaults to NESTED and OSX defaults to UNNESTED, so use UNNESTED explicitly.
@@ -839,7 +839,6 @@ void LLPumpIO::initialize(apr_pool_t* pool)
void LLPumpIO::cleanup()
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
#if LL_THREADS_APR
if(mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
if(mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
@@ -848,7 +847,7 @@ void LLPumpIO::cleanup()
mCallbackMutex = NULL;
if(mPollset)
{
-// lldebugs << "cleaning up pollset" << llendl;
+// LL_DEBUGS() << "cleaning up pollset" << LL_ENDL;
apr_pollset_destroy(mPollset);
mPollset = NULL;
}
@@ -862,11 +861,10 @@ void LLPumpIO::cleanup()
void LLPumpIO::rebuildPollset()
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
-// lldebugs << "LLPumpIO::rebuildPollset()" << llendl;
+// LL_DEBUGS() << "LLPumpIO::rebuildPollset()" << LL_ENDL;
if(mPollset)
{
- //lldebugs << "destroying pollset" << llendl;
+ //LL_DEBUGS() << "destroying pollset" << LL_ENDL;
apr_pollset_destroy(mPollset);
mPollset = NULL;
}
@@ -877,7 +875,7 @@ void LLPumpIO::rebuildPollset()
{
size += (*run_it).mDescriptors.size();
}
- //lldebugs << "found " << size << " descriptors." << llendl;
+ //LL_DEBUGS() << "found " << size << " descriptors." << LL_ENDL;
if(size)
{
// Recycle the memory pool
@@ -915,7 +913,6 @@ void LLPumpIO::rebuildPollset()
void LLPumpIO::processChain(LLChainInfo& chain)
{
PUMP_DEBUG;
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
LLIOPipe::EStatus status = LLIOPipe::STATUS_OK;
links_t::iterator it = chain.mHead;
links_t::iterator end = chain.mChainLinks.end();
@@ -925,10 +922,10 @@ void LLPumpIO::processChain(LLChainInfo& chain)
{
#if LL_DEBUG_PROCESS_LINK
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
- llinfos << "Processing " << typeid(*((*it).mPipe)).name() << "."
- << llendl;
+ LL_INFOS() << "Processing " << typeid(*((*it).mPipe)).name() << "."
+ << LL_ENDL;
#else
- llinfos << "Processing link " << (*it).mPipe << "." << llendl;
+ LL_INFOS() << "Processing link " << (*it).mPipe << "." << LL_ENDL;
#endif
#endif
#if LL_DEBUG_SPEW_BUFFER_CHANNEL_IN
@@ -945,15 +942,15 @@ void LLPumpIO::processChain(LLChainInfo& chain)
(U8*)buf,
bytes);
buf[bytes] = '\0';
- llinfos << "CHANNEL IN(" << (*it).mChannels.in() << "): "
- << buf << llendl;
+ LL_INFOS() << "CHANNEL IN(" << (*it).mChannels.in() << "): "
+ << buf << LL_ENDL;
delete[] buf;
buf = NULL;
}
else
{
- llinfos << "CHANNEL IN(" << (*it).mChannels.in()<< "): (null)"
- << llendl;
+ LL_INFOS() << "CHANNEL IN(" << (*it).mChannels.in()<< "): (null)"
+ << LL_ENDL;
}
}
#endif
@@ -978,15 +975,15 @@ void LLPumpIO::processChain(LLChainInfo& chain)
(U8*)buf,
bytes);
buf[bytes] = '\0';
- llinfos << "CHANNEL OUT(" << (*it).mChannels.out()<< "): "
- << buf << llendl;
+ LL_INFOS() << "CHANNEL OUT(" << (*it).mChannels.out()<< "): "
+ << buf << LL_ENDL;
delete[] buf;
buf = NULL;
}
else
{
- llinfos << "CHANNEL OUT(" << (*it).mChannels.out()<< "): (null)"
- << llendl;
+ LL_INFOS() << "CHANNEL OUT(" << (*it).mChannels.out()<< "): (null)"
+ << LL_ENDL;
}
}
#endif
@@ -996,11 +993,11 @@ void LLPumpIO::processChain(LLChainInfo& chain)
// below.
if(LLIOPipe::isSuccess(status))
{
- llinfos << "Pipe returned: '"
+ LL_INFOS() << "Pipe returned: '"
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
<< typeid(*((*it).mPipe)).name() << "':'"
#endif
- << LLIOPipe::lookupStatusString(status) << "'" << llendl;
+ << LLIOPipe::lookupStatusString(status) << "'" << LL_ENDL;
}
#endif
@@ -1040,12 +1037,12 @@ void LLPumpIO::processChain(LLChainInfo& chain)
PUMP_DEBUG;
if(LLIOPipe::isError(status))
{
- llinfos << "Pump generated pipe err: '"
+ LL_INFOS() << "Pump generated pipe err: '"
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
<< typeid(*((*it).mPipe)).name() << "':'"
#endif
<< LLIOPipe::lookupStatusString(status)
- << "'" << llendl;
+ << "'" << LL_ENDL;
#if LL_DEBUG_SPEW_BUFFER_CHANNEL_IN_ON_ERROR
if(chain.mData)
{
@@ -1062,18 +1059,18 @@ void LLPumpIO::processChain(LLChainInfo& chain)
(U8*)buf,
bytes);
buf[bytes] = '\0';
- llinfos << "Input After Error: " << buf << llendl;
+ LL_INFOS() << "Input After Error: " << buf << LL_ENDL;
delete[] buf;
buf = NULL;
}
else
{
- llinfos << "Input After Error: (null)" << llendl;
+ LL_INFOS() << "Input After Error: (null)" << LL_ENDL;
}
}
else
{
- llinfos << "Input After Error: (null)" << llendl;
+ LL_INFOS() << "Input After Error: (null)" << LL_ENDL;
}
#endif
keep_going = false;
@@ -1085,8 +1082,8 @@ void LLPumpIO::processChain(LLChainInfo& chain)
}
else
{
- llinfos << "Unhandled status code: " << status << ":"
- << LLIOPipe::lookupStatusString(status) << llendl;
+ LL_INFOS() << "Unhandled status code: " << status << ":"
+ << LLIOPipe::lookupStatusString(status) << LL_ENDL;
}
break;
}
@@ -1095,11 +1092,28 @@ void LLPumpIO::processChain(LLChainInfo& chain)
PUMP_DEBUG;
}
+bool LLPumpIO::isChainExpired(LLChainInfo& chain)
+{
+ if(!chain.mHasCurlRequest)
+ {
+ return false ;
+ }
+
+ for(links_t::iterator iter = chain.mChainLinks.begin(); iter != chain.mChainLinks.end(); ++iter)
+ {
+ if(!(*iter).mPipe->isValid())
+ {
+ return true ;
+ }
+ }
+
+ return false ;
+}
+
bool LLPumpIO::handleChainError(
LLChainInfo& chain,
LLIOPipe::EStatus error)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
links_t::reverse_iterator rit;
if(chain.mHead == chain.mChainLinks.end())
{
@@ -1116,8 +1130,8 @@ bool LLPumpIO::handleChainError(
do
{
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
- lldebugs << "Passing error to " << typeid(*((*rit).mPipe)).name()
- << "." << llendl;
+ LL_DEBUGS() << "Passing error to " << typeid(*((*rit).mPipe)).name()
+ << "." << LL_ENDL;
#endif
error = (*rit).mPipe->handleError(error, this);
switch(error)
@@ -1131,16 +1145,19 @@ bool LLPumpIO::handleChainError(
case LLIOPipe::STATUS_BREAK:
case LLIOPipe::STATUS_NEED_PROCESS:
#if LL_DEBUG_PIPE_TYPE_IN_PUMP
- lldebugs << "Pipe " << typeid(*((*rit).mPipe)).name()
- << " returned code to stop error handler." << llendl;
+ LL_DEBUGS() << "Pipe " << typeid(*((*rit).mPipe)).name()
+ << " returned code to stop error handler." << LL_ENDL;
#endif
keep_going = false;
break;
+ case LLIOPipe::STATUS_EXPIRED:
+ keep_going = false;
+ break ;
default:
if(LLIOPipe::isSuccess(error))
{
- llinfos << "Unhandled status code: " << error << ":"
- << LLIOPipe::lookupStatusString(error) << llendl;
+ LL_INFOS() << "Unhandled status code: " << error << ":"
+ << LLIOPipe::lookupStatusString(error) << LL_ENDL;
error = LLIOPipe::STATUS_ERROR;
keep_going = false;
}
@@ -1157,15 +1174,14 @@ bool LLPumpIO::handleChainError(
LLPumpIO::LLChainInfo::LLChainInfo() :
mInit(false),
mLock(0),
- mEOS(false)
+ mEOS(false),
+ mHasCurlRequest(false)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
mTimer.setTimerExpirySec(DEFAULT_CHAIN_EXPIRY_SECS);
}
void LLPumpIO::LLChainInfo::setTimeoutSeconds(F32 timeout)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(timeout > 0.0f)
{
mTimer.start();
@@ -1180,7 +1196,6 @@ void LLPumpIO::LLChainInfo::setTimeoutSeconds(F32 timeout)
void LLPumpIO::LLChainInfo::adjustTimeoutSeconds(F32 delta)
{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
if(mTimer.getStarted())
{
F64 expiry = mTimer.expiresAt();