Skip to content

Commit

Permalink
changed: When emptyng Curl's overflow buffer, shrink overflow buffer …
Browse files Browse the repository at this point in the history
…+ tweaks
  • Loading branch information
arnova committed May 29, 2015
1 parent 5737b0c commit 25a7af7
Showing 1 changed file with 15 additions and 4 deletions.
19 changes: 15 additions & 4 deletions xbmc/filesystem/CurlFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,12 +195,20 @@ size_t CCurlFile::CReadState::WriteCallback(char *buffer, size_t size, size_t ni
if (maxWriteable)
{
if (!m_buffer.WriteData(m_overflowBuffer, maxWriteable))
{
CLog::Log(LOGERROR, "CCurlFile::WriteCallback - Unable to write to buffer - what's up?");
if (m_overflowSize > maxWriteable)
{ // still have some more - copy it down
memmove(m_overflowBuffer, m_overflowBuffer + maxWriteable, m_overflowSize - maxWriteable);
return 0;
}

if (maxWriteable < m_overflowSize)
{
// still have some more - copy it down
memcpy(m_overflowBuffer, m_overflowBuffer + maxWriteable, m_overflowSize - maxWriteable);
}
m_overflowSize -= maxWriteable;

// Shrink memory:
m_overflowBuffer = (char*)realloc_simple(m_overflowBuffer, m_overflowSize);
}
}
// ok, now copy the data into our ring buffer
Expand All @@ -210,6 +218,7 @@ size_t CCurlFile::CReadState::WriteCallback(char *buffer, size_t size, size_t ni
if (!m_buffer.WriteData(buffer, maxWriteable))
{
CLog::Log(LOGERROR, "CCurlFile::WriteCallback - Unable to write to buffer with %i bytes - what's up?", maxWriteable);
return 0;
}
else
{
Expand All @@ -221,6 +230,7 @@ size_t CCurlFile::CReadState::WriteCallback(char *buffer, size_t size, size_t ni
{
// CLog::Log(LOGDEBUG, "CCurlFile::WriteCallback(%p) not enough free space for %i bytes", (void*)this, amount);

// TODO: Limit max. amount of the overflowbuffer
m_overflowBuffer = (char*)realloc_simple(m_overflowBuffer, amount + m_overflowSize);
if(m_overflowBuffer == NULL)
{
Expand Down Expand Up @@ -1469,9 +1479,10 @@ bool CCurlFile::CReadState::FillBuffer(unsigned int want)
m_buffer.WriteData(m_overflowBuffer, amount);

if (amount < m_overflowSize)
memcpy(m_overflowBuffer, m_overflowBuffer+amount,m_overflowSize-amount);
memcpy(m_overflowBuffer, m_overflowBuffer + amount, m_overflowSize - amount);

m_overflowSize -= amount;
// Shrink memory:
m_overflowBuffer = (char*)realloc_simple(m_overflowBuffer, m_overflowSize);
continue;
}
Expand Down

0 comments on commit 25a7af7

Please sign in to comment.