aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lib/message.cc13
-rw-r--r--lib/notmuch-private.h3
-rw-r--r--lib/thread.cc9
3 files changed, 23 insertions, 2 deletions
diff --git a/lib/message.cc b/lib/message.cc
index cb902643..5f8db50f 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -547,6 +547,19 @@ _notmuch_message_sync (notmuch_message_t *message)
db->replace_document (message->doc_id, message->doc);
}
+/* Ensure that 'message' is not holding any file object open. Future
+ * calls to various functions will still automatically open the
+ * message file as needed.
+ */
+void
+_notmuch_message_close (notmuch_message_t *message)
+{
+ if (message->message_file) {
+ notmuch_message_file_close (message->message_file);
+ message->message_file = NULL;
+ }
+}
+
/* Add a name:value term to 'message', (the actual term will be
* encoded by prefixing the value with a short prefix). See
* NORMAL_PREFIX and BOOLEAN_PREFIX arrays for the mapping of term
diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h
index c398c80a..ddf0674a 100644
--- a/lib/notmuch-private.h
+++ b/lib/notmuch-private.h
@@ -207,6 +207,9 @@ _notmuch_message_set_date (notmuch_message_t *message,
void
_notmuch_message_sync (notmuch_message_t *message);
+void
+_notmuch_message_close (notmuch_message_t *message);
+
/* index.cc */
notmuch_status_t
diff --git a/lib/thread.cc b/lib/thread.cc
index e38a5b2e..baa9e7e8 100644
--- a/lib/thread.cc
+++ b/lib/thread.cc
@@ -207,6 +207,7 @@ _notmuch_thread_create (void *ctx,
const char *thread_id_query_string, *matched_query_string;
notmuch_query_t *thread_id_query, *matched_query;
notmuch_messages_t *messages;
+ notmuch_message_t *message;
thread_id_query_string = talloc_asprintf (ctx, "thread:%s", thread_id);
if (unlikely (query_string == NULL))
@@ -263,7 +264,9 @@ _notmuch_thread_create (void *ctx,
notmuch_messages_has_more (messages);
notmuch_messages_advance (messages))
{
- _thread_add_message (thread, notmuch_messages_get (messages));
+ message = notmuch_messages_get (messages);
+ _thread_add_message (thread, message);
+ _notmuch_message_close (message);
}
notmuch_query_destroy (thread_id_query);
@@ -272,7 +275,9 @@ _notmuch_thread_create (void *ctx,
notmuch_messages_has_more (messages);
notmuch_messages_advance (messages))
{
- _thread_add_matched_message (thread, notmuch_messages_get (messages));
+ message = notmuch_messages_get (messages);
+ _thread_add_matched_message (thread, message);
+ _notmuch_message_close (message);
}
notmuch_query_destroy (matched_query);