From c8a17c1ca75807bb45531b920f8c1515d22bdb89 Mon Sep 17 00:00:00 2001 From: "bienvenu%netscape.com" Date: Thu, 2 Nov 2000 02:22:13 +0000 Subject: [PATCH] fix 46375 (or part of it, anyway) reading large imap messages in too small chunks r=jefft, sr=mscott git-svn-id: svn://10.0.0.236/trunk@82210 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/mailnews/imap/src/nsImapProtocol.cpp | 23 ++++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/mozilla/mailnews/imap/src/nsImapProtocol.cpp b/mozilla/mailnews/imap/src/nsImapProtocol.cpp index b95a1589f5d..1459685987a 100644 --- a/mozilla/mailnews/imap/src/nsImapProtocol.cpp +++ b/mozilla/mailnews/imap/src/nsImapProtocol.cpp @@ -2220,26 +2220,35 @@ nsImapProtocol::GetArbitraryHeadersToDownload() return rv; } +static void PRTime2Seconds(PRTime prTime, PRInt32 *seconds) +{ + PRInt64 microSecondsPerSecond, intermediateResult; + + LL_I2L(microSecondsPerSecond, PR_USEC_PER_SEC); + LL_DIV(intermediateResult, prTime, microSecondsPerSecond); + LL_L2I((*seconds), intermediateResult); +} + void nsImapProtocol::AdjustChunkSize() { - PRInt32 t32; + PRTime deltaTime; + PRInt32 deltaInSeconds; m_endTime = PR_Now(); + LL_SUB(deltaTime, m_endTime, m_startTime); + PRTime2Seconds(deltaTime, &deltaInSeconds); m_trackingTime = PR_FALSE; - PRTime t; - LL_SUB(t, m_endTime, m_startTime); - if (! LL_GE_ZERO(t)) + if (deltaInSeconds < 0) return; // bogus for some reason - LL_L2I(t32, t); - if (t32 <= m_tooFastTime) { + if (deltaInSeconds <= m_tooFastTime) { m_chunkSize += m_chunkAddSize; m_chunkThreshold = m_chunkSize + (m_chunkSize / 2); if (m_chunkSize > m_maxChunkSize) m_chunkSize = m_maxChunkSize; } - else if (t32 <= m_idealTime) + else if (deltaInSeconds <= m_idealTime) return; else { if (m_chunkSize > m_chunkStartSize)