[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Memory leaks in font objects
From: |
Dmitry Antipov |
Subject: |
Re: Memory leaks in font objects |
Date: |
Thu, 24 Oct 2013 19:49:20 +0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.0.1 |
On 10/24/2013 06:19 PM, Stefan Monnier wrote:
Oddly enough, I'm not sure it's a leak. Here's the result of my test:
VM RSS
initial 204 24
after 1 522 290
after 2 539 305
after 3 542 308
after 4 542 308
So it's more like "once malloced, the memory can be reused by Emacs, but
not by another process because we never return it to the OS".
IIUC no :-(. I tried the following:
initial: 32M RSS
then M-x bloat-font, M-x set-frame-font "fixed", M-x garbage-collect: 372M
then M-x byte-force-recompile [all lisp/ subdir], M-x garbage-collect: 437M
If 372M is (mostly) free but just too fragmented to release,
byte-force-recompile
should reuse a lot of memory - so why +65M? But, 2nd run of bloat-font do not
add
too much. Why? Consider XLoadQueryFont example. When you do not call XFreeFont
but
just lost XFontStruct pointer, the font is still allocated by Xlib. Since you
lost
the pointer, you can't use this font unless you call XLoadQueryFont for the same
font again and got the pointer to previously allocated resource (assuming that
you
do not lost the connection to X display). So 2nd, 3rd, etc. calls to bloat-font
will just re-use font resources you lost before. But, if you need to allocate
something else, you will need more memory.
What the difference between "close" and "finalize"?
Nothing except "close" is a part of existing interface which I don't want
to change (at this moment at least), and requires extra frame argument.
Dmitry