Skip to content
Permalink
Browse files

Fix file streaming to stay working past 4G

The previous logic would loop, and remove 2G from llBytes the first time
through the loop (correctly), but remove 4G from llBytes the second time
through the loop (very incorrectly).  This causes a UPnP client, etc to
abruptly stop after 4G if the file size is between 4G and 6G, and 2G early for
file size of 6G to 8G, and so on.

I simplified the logic to work correctly in my testing.
  • Loading branch information
Beirdo committed Dec 6, 2010
1 parent 5e5908b commit d5d1cc16c11ebb32e0c37ebdf51a25ff1f0bd051
Showing with 12 additions and 4 deletions.
  1. +12 −4 mythtv/libs/libmythupnp/httprequest.cpp
@@ -522,6 +522,8 @@ qint64 HTTPRequest::SendFile( QFile &file, qint64 llStart, qint64 llBytes )
}
else
{
qint64 llSent = 0;

do
{
// SSIZE_MAX should work in kernels 2.6.16 and later.
@@ -531,12 +533,18 @@ qint64 HTTPRequest::SendFile( QFile &file, qint64 llStart, qint64 llBytes )
getSocketHandle(), fd, &offset,
(size_t) ((llBytes > INT_MAX) ? INT_MAX : llBytes));

llBytes -= ( offset - llStart );
VERBOSE(VB_UPNP, QString("SendResponseFile : --- "
"size = %1, offset = %2, sent = %3")
.arg(llBytes).arg(offset).arg(sent));
if (sent >= 0)
{
llBytes -= sent;
llSent += sent;
VERBOSE(VB_UPNP, QString("SendResponseFile : --- "
"size = %1, offset = %2, sent = %3")
.arg(llBytes).arg(offset).arg(sent));
}
}
while (( sent >= 0 ) && ( llBytes > 0 ));

sent = llSent;
}

#endif

0 comments on commit d5d1cc1

Please sign in to comment.
You can’t perform that action at this time.