#3973: Patch: maildir_check_mailbox()
-------------------------+----------------------
Reporter: jaalto | Owner: mutt-dev
Type: enhancement | Status: new
Priority: minor | Milestone:
Component: mutt | Version:
Keywords: |
-------------------------+----------------------
''This is forward of following post. Please consider investigating and
contacting the original author.''
'''A KERNEL DEV'S APPROACH TO IMPROVING MUTT'S PERFORMANCE - PART 2
'''
http://www.codeblueprint.co.uk/2017/01/15/a-kernel-devs-approach-to-
improving2
(...)I noticed that when mutt locks up top(1) reports it consuming 100%
CPU, which suggests that we can use the cpu-cycles perf event to gather a
profile for mutt and figure out where those cycles are going. (...) Below
is the change I made to mutt’s maildir_check_mailbox() to take into
account the number of files my the LKML directory when building the hash
table. With it, I no longer see any lockup when new mail arrives:
Patch:
https://gist.github.com/mfleming/aa29c562bdb32fe938a4e35694f67092/raw/905b295cbea387f9d997cccb116aadab8d998930/gistfile1.txt
{{{
diff -r 02bc14ed1569 mh.c
--- a/mh.c Tue Dec 08 09:12:09 2015 -0800
+++ b/mh.c Sun Jan 15 21:35:48 2017 +0000
@@ -1908,6 +1908,7 @@
struct maildir *md; /* list of messages in the mailbox */
struct maildir **last, *p;
int i;
+ int count = 0;
HASH *fnames; /* hash table for quickly looking
up the base filename
for a maildir message */
struct mh_data *data = mh_data (ctx);
@@ -1945,15 +1946,15 @@
md = NULL;
last = &md;
if (changed & 1)
- maildir_parse_dir (ctx, &last, "new", NULL, NULL);
+ maildir_parse_dir (ctx, &last, "new", &count, NULL);
if (changed & 2)
- maildir_parse_dir (ctx, &last, "cur", NULL, NULL);
+ maildir_parse_dir (ctx, &last, "cur", &count, NULL);
/* we create a hash table keyed off the canonical (sans flags) filename
* of each message we scanned. This is used in the loop over the
* existing messages below to do some correlation.
*/
- fnames = hash_create (1031, 0);
+ fnames = hash_create (count, 0);
for (p = md; p; p = p->next)
{
}}}
--
Ticket URL: <https://dev.mutt.org/trac/ticket/3973>
Mutt <http://www.mutt.org/>
The Mutt mail user agent