diff options
author | Don Sanders <don.sanders@nokia.com> | 2012-03-06 16:16:28 +0200 |
---|---|---|
committer | Don Sanders <don.sanders@nokia.com> | 2012-03-06 16:16:28 +0200 |
commit | bd6e576a6307df6c15f7ffca05959016bb862a68 (patch) | |
tree | b42e54f257a083096e35c51a93bf0b26bb816244 | |
parent | 1110aba98de19e3f1cd223f49e8ab3ca3f4f6fb3 (diff) |
Reduce peak memory use
Only allow ~1MB of mail data to be buffered by qmailmessagebuffer.
-rw-r--r-- | src/libraries/qmfmessageserver/qmailmessagebuffer.cpp | 18 | ||||
-rw-r--r-- | src/libraries/qmfmessageserver/qmailmessagebuffer.h | 1 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/libraries/qmfmessageserver/qmailmessagebuffer.cpp b/src/libraries/qmfmessageserver/qmailmessagebuffer.cpp index 61eb5361..1d48f647 100644 --- a/src/libraries/qmfmessageserver/qmailmessagebuffer.cpp +++ b/src/libraries/qmfmessageserver/qmailmessagebuffer.cpp @@ -221,8 +221,24 @@ int QMailMessageBuffer::messagePending() { return d->waitingForFlush.size(); } +int QMailMessageBuffer::maximumBufferSize() const +{ + // 1MB buffer = 900KB + 100KB for largest message (default 100KB body limit) + return 1024*900; +} + bool QMailMessageBuffer::isFull() { - return messagePending() >= d->maxPending; + if (messagePending() >= d->maxPending) { + return true; + } + int totalSize = 0; + foreach (BufferItem *item, d->waitingForFlush) { + totalSize += item->message->body().length(); + if (totalSize > maximumBufferSize()) { + return true; + } + } + return false; } void QMailMessageBuffer::readConfig() diff --git a/src/libraries/qmfmessageserver/qmailmessagebuffer.h b/src/libraries/qmfmessageserver/qmailmessagebuffer.h index c9e4bd09..3d556074 100644 --- a/src/libraries/qmfmessageserver/qmailmessagebuffer.h +++ b/src/libraries/qmfmessageserver/qmailmessagebuffer.h @@ -72,6 +72,7 @@ public: bool addMessage(QMailMessage *message); bool updateMessage(QMailMessage *message); bool setCallback(QMailMessage *message, QMailMessageBufferFlushCallback *callback); + int maximumBufferSize() const; void flush(); |