summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDon Sanders <don.sanders@nokia.com>2012-03-06 16:16:28 +0200
committerDon Sanders <don.sanders@nokia.com>2012-03-06 16:16:28 +0200
commitbd6e576a6307df6c15f7ffca05959016bb862a68 (patch)
treeb42e54f257a083096e35c51a93bf0b26bb816244
parent1110aba98de19e3f1cd223f49e8ab3ca3f4f6fb3 (diff)
Reduce peak memory use
Only allow ~1MB of mail data to be buffered by qmailmessagebuffer.
-rw-r--r--src/libraries/qmfmessageserver/qmailmessagebuffer.cpp18
-rw-r--r--src/libraries/qmfmessageserver/qmailmessagebuffer.h1
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();