all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Using the ImageMagick backend seems to leak memory
@ 2011-01-06  7:51 Tassilo Horn
  2011-01-06  9:02 ` joakim
                   ` (2 more replies)
  0 siblings, 3 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-06  7:51 UTC (permalink / raw)
  To: emacs-devel

Hi all,

I just noticed that my emacs uses up more than a gigabyte memory.  It is
because of doc-view with ImageMagick backend.

After starting my emacs, it needs ~50 MB.  Firing up doc-view on a PDF
and showing page one increases to ~80 MB.  Switching to other pages
increases about 30 MB every time.  Switching to already seen pages
doesn't increase the memory requirements.  (I convert the docs with
doc-view-resolution set to 200, so 30 MB a page might be possible.)

Killing the buffer doesn't free the memory again, neither do
(clear-image-cache) or (garbage-collect).  So how do I reclaim that
memory?

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-06  7:51 Using the ImageMagick backend seems to leak memory Tassilo Horn
@ 2011-01-06  9:02 ` joakim
  2011-01-06 10:20   ` Tassilo Horn
  2011-01-07  4:17 ` Jashy
  2011-01-10 21:47 ` Tassilo Horn
  2 siblings, 1 reply; 29+ messages in thread
From: joakim @ 2011-01-06  9:02 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: emacs-devel

Tassilo Horn <tassilo@member.fsf.org> writes:

> Hi all,
>
> I just noticed that my emacs uses up more than a gigabyte memory.  It is
> because of doc-view with ImageMagick backend.
>
> After starting my emacs, it needs ~50 MB.  Firing up doc-view on a PDF
> and showing page one increases to ~80 MB.  Switching to other pages
> increases about 30 MB every time.  Switching to already seen pages
> doesn't increase the memory requirements.  (I convert the docs with
> doc-view-resolution set to 200, so 30 MB a page might be possible.)
>
> Killing the buffer doesn't free the memory again, neither do
> (clear-image-cache) or (garbage-collect).  So how do I reclaim that
> memory?

Do you get the same result with (setq imagemagick-render-type 1) ?

>
> Bye,
> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-06  9:02 ` joakim
@ 2011-01-06 10:20   ` Tassilo Horn
  0 siblings, 0 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-06 10:20 UTC (permalink / raw)
  To: joakim; +Cc: emacs-devel

joakim@verona.se writes:

Hi Joakim,

>> I just noticed that my emacs uses up more than a gigabyte memory.  It
>> is because of doc-view with ImageMagick backend.
>>
>> After starting my emacs, it needs ~50 MB.  Firing up doc-view on a
>> PDF and showing page one increases to ~80 MB.  Switching to other
>> pages increases about 30 MB every time.  Switching to already seen
>> pages doesn't increase the memory requirements.  (I convert the docs
>> with doc-view-resolution set to 200, so 30 MB a page might be
>> possible.)
>>
>> Killing the buffer doesn't free the memory again, neither do
>> (clear-image-cache) or (garbage-collect).  So how do I reclaim that
>> memory?
>
> Do you get the same result with (setq imagemagick-render-type 1) ?

I already used that.  Now I switched to 0, but that doesn't change
anything.  Memory is not reclaimed...

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-06  7:51 Using the ImageMagick backend seems to leak memory Tassilo Horn
  2011-01-06  9:02 ` joakim
@ 2011-01-07  4:17 ` Jashy
  2011-01-07  4:59   ` Miles Bader
  2011-01-10 21:47 ` Tassilo Horn
  2 siblings, 1 reply; 29+ messages in thread
From: Jashy @ 2011-01-07  4:17 UTC (permalink / raw)
  To: Emacs-devel



Bugzilla from tassilo@member.fsf.org wrote:
> 
> I just noticed that my emacs uses up more than a gigabyte memory.  It is
> because of doc-view with ImageMagick backend.
> 
I met same issue.
-- 
View this message in context: http://old.nabble.com/Using-the-ImageMagick-backend-seems-to-leak-memory-tp30603180p30611405.html
Sent from the Emacs - Dev mailing list archive at Nabble.com.




^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-07  4:17 ` Jashy
@ 2011-01-07  4:59   ` Miles Bader
  2011-01-07  6:27     ` Stephen J. Turnbull
  2011-01-07  8:28     ` Tassilo Horn
  0 siblings, 2 replies; 29+ messages in thread
From: Miles Bader @ 2011-01-07  4:59 UTC (permalink / raw)
  To: Jashy; +Cc: Emacs-devel

Jashy <nanjunjie@gmail.com> writes:
>> I just noticed that my emacs uses up more than a gigabyte memory.  It is
>> because of doc-view with ImageMagick backend.
>> 
> I met same issue.

My impression is that in general, ImageMagick does not aim at memory
efficiency (that's why I don't want to use its libraries for my own
image I/O needs, event though doing so would be pretty convenient).
I would have though it's OK for small/medium images though.

-Miles

-- 
Run away!  Run away!



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-07  4:59   ` Miles Bader
@ 2011-01-07  6:27     ` Stephen J. Turnbull
  2011-01-07  7:25       ` Miles Bader
  2011-01-07  8:28     ` Tassilo Horn
  1 sibling, 1 reply; 29+ messages in thread
From: Stephen J. Turnbull @ 2011-01-07  6:27 UTC (permalink / raw)
  To: Jashy, Emacs-devel

Miles Bader writes:

 > My impression is that in general, ImageMagick does not aim at memory
 > efficiency (that's why I don't want to use its libraries for my own
 > image I/O needs, event though doing so would be pretty convenient).
 > I would have though it's OK for small/medium images though.

I believe disagreement on this point was a (minor) reason why the
GraphicsMagick project forked off.  Anyway, GraphicsMagick *does* aim
at efficiency, both in time and space.  For that reason it's been my
primary target in speculation about adding such support to XEmacs.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-07  6:27     ` Stephen J. Turnbull
@ 2011-01-07  7:25       ` Miles Bader
  0 siblings, 0 replies; 29+ messages in thread
From: Miles Bader @ 2011-01-07  7:25 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: Jashy, Emacs-devel

"Stephen J. Turnbull" <stephen@xemacs.org> writes:
>  > My impression is that in general, ImageMagick does not aim at memory
>  > efficiency (that's why I don't want to use its libraries for my own
>  > image I/O needs, event though doing so would be pretty convenient).
>  > I would have though it's OK for small/medium images though.
>
> I believe disagreement on this point was a (minor) reason why the
> GraphicsMagick project forked off.  Anyway, GraphicsMagick *does* aim
> at efficiency, both in time and space.

Sadly GraphicsMagick seems to have achieved this partly by dropping some
important features (e.g. floating-point pixel support...).

Probabably not relevant for Emacs I suppose.

What _I_ want, though, is a way to use one of these toolkits lower-level
way that allows me to do progressive/partial I/O.  Unfortunately it
seems that most unified image-handling toolkits sort of ignore anything
but whole-image I/O...

-Miles

-- 
Generous, adj. Originally this word meant noble by birth and was rightly
applied to a great multitude of persons. It now means noble by nature and is
taking a bit of a rest.



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-07  4:59   ` Miles Bader
  2011-01-07  6:27     ` Stephen J. Turnbull
@ 2011-01-07  8:28     ` Tassilo Horn
  2011-01-07 22:39       ` Andreas Schwab
  2011-01-11 14:17       ` joakim
  1 sibling, 2 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-07  8:28 UTC (permalink / raw)
  To: Miles Bader; +Cc: Jashy, Emacs-devel

Miles Bader <miles@gnu.org> writes:

>>> I just noticed that my emacs uses up more than a gigabyte memory.
>>> It is because of doc-view with ImageMagick backend.
>>> 
>> I met same issue.
>
> My impression is that in general, ImageMagick does not aim at memory
> efficiency (that's why I don't want to use its libraries for my own
> image I/O needs, event though doing so would be pretty convenient).

Well, not being memory efficiency and not giving back memory at all is a
minor difference. ;-)

I've just opened a doc-view page-x.png with ImageMagick's display tool.
The behavior is identical, e.g., it reserves ~30MB per PNG and only
gives back memory when I close the program.  So I presume, ImageMagick
has some cache that gets at least cleared when the process is killed.
I'm sure, there's some C function you can call to clear it...

Looking at the API, there's

--8<---------------cut here---------------start------------->8---
ClearMagickWand() clears resources associated with the wand.
The format of the ClearMagickWand method is:

  void ClearMagickWand(MagickWand *wand)

A description of each parameter follows:
wand
  the magick wand.
--8<---------------cut here---------------end--------------->8---

In the emacs sources, that function's never called.  So that's probably
the source of the leak.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-07  8:28     ` Tassilo Horn
@ 2011-01-07 22:39       ` Andreas Schwab
  2011-01-10 10:34         ` Tassilo Horn
  2011-01-11 14:17       ` joakim
  1 sibling, 1 reply; 29+ messages in thread
From: Andreas Schwab @ 2011-01-07 22:39 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: Emacs-devel, Jashy, Miles Bader

Tassilo Horn <tassilo@member.fsf.org> writes:

> Looking at the API, there's
>
> ClearMagickWand() clears resources associated with the wand.
> The format of the ClearMagickWand method is:
>
>   void ClearMagickWand(MagickWand *wand)
>
> A description of each parameter follows:
> wand
>   the magick wand.
>
> In the emacs sources, that function's never called.  So that's probably
> the source of the leak.

DestroyMagickWand should imply ClearMagickWand, IIUC.

I've fixed a few resource leaks, but that did not really help.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-07 22:39       ` Andreas Schwab
@ 2011-01-10 10:34         ` Tassilo Horn
  2011-01-10 13:28           ` Jashy
  2011-01-11 10:59           ` joakim
  0 siblings, 2 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-10 10:34 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Miles Bader, Jashy, Emacs-devel

Andreas Schwab <schwab@linux-m68k.org> writes:

Hi Andreas,

>> Looking at the API, there's
>>
>> ClearMagickWand() clears resources associated with the wand.
>> The format of the ClearMagickWand method is:
>>
>>   void ClearMagickWand(MagickWand *wand)
>>
>> A description of each parameter follows:
>> wand
>>   the magick wand.
>>
>> In the emacs sources, that function's never called.  So that's
>> probably the source of the leak.
>
> DestroyMagickWand should imply ClearMagickWand, IIUC.
>
> I've fixed a few resource leaks, but that did not really help.

Looking at the code examples at 

  http://www.imagemagick.org/api/magick-wand.php

it seems one must call

  MagickWandTerminus();

after destroying the wands.

Maybe that helps.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-10 10:34         ` Tassilo Horn
@ 2011-01-10 13:28           ` Jashy
  2011-01-10 13:56             ` Tassilo Horn
  2011-01-11 10:59           ` joakim
  1 sibling, 1 reply; 29+ messages in thread
From: Jashy @ 2011-01-10 13:28 UTC (permalink / raw)
  To: Emacs-devel



Tassilo Horn-5 wrote:
> 
> it seems one must call
>   MagickWandTerminus();
> after destroying the wands.
> Maybe that helps.
> 

Seemly it does not help too much:
diff --git a/src/image.c b/src/image.c
index fd1b921..00f857b 100644
--- a/src/image.c
+++ b/src/image.c
@@ -7539,6 +7539,7 @@ imagemagick_load_image (/* Pointer to emacs frame
structure.  */
       image_error ("Invalid image number `%s' in image `%s'",
 		   image, img->spec);
       DestroyMagickWand (ping_wand);
+      MagickWandTerminus ();
       return 0;
     }
 
@@ -7549,6 +7550,7 @@ imagemagick_load_image (/* Pointer to emacs frame
structure.  */
                     img->data.lisp_val));
 
   DestroyMagickWand (ping_wand);
+  MagickWandTerminus ();
   /* Now, after pinging, we know how many images are inside the
      file. If its not a bundle, just one.  */
 
@@ -7806,10 +7808,12 @@ imagemagick_load_image (/* Pointer to emacs frame
structure.  */
   /* Final cleanup. image_wand should be the only resource left. */
   DestroyMagickWand (image_wand);
 
+  MagickWandTerminus ();
   return 1;
 
  imagemagick_error:
   DestroyMagickWand (image_wand);
+  MagickWandTerminus ();
   /* TODO more cleanup.  */
   image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec, Qnil);
   return 0;


-- 
View this message in context: http://old.nabble.com/Using-the-ImageMagick-backend-seems-to-leak-memory-tp30603180p30633674.html
Sent from the Emacs - Dev mailing list archive at Nabble.com.




^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-10 13:28           ` Jashy
@ 2011-01-10 13:56             ` Tassilo Horn
  2011-01-10 14:36               ` Jashy
  0 siblings, 1 reply; 29+ messages in thread
From: Tassilo Horn @ 2011-01-10 13:56 UTC (permalink / raw)
  To: Jashy; +Cc: Emacs-devel

Jashy <nanjunjie@gmail.com> writes:

Hi Jashy,

> Seemly it does not help too much:

I didn't try your patch yet, but what are your results?  Does it free at
least some resources, or is it as bad as without the calls?

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-10 13:56             ` Tassilo Horn
@ 2011-01-10 14:36               ` Jashy
  2011-01-11 10:14                 ` Jashy
  0 siblings, 1 reply; 29+ messages in thread
From: Jashy @ 2011-01-10 14:36 UTC (permalink / raw)
  To: Emacs-devel


Seemly it does not help too much.
-- 
View this message in context: http://old.nabble.com/Using-the-ImageMagick-backend-seems-to-leak-memory-tp30603180p30634284.html
Sent from the Emacs - Dev mailing list archive at Nabble.com.




^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-06  7:51 Using the ImageMagick backend seems to leak memory Tassilo Horn
  2011-01-06  9:02 ` joakim
  2011-01-07  4:17 ` Jashy
@ 2011-01-10 21:47 ` Tassilo Horn
  2011-01-11  8:47   ` Tassilo Horn
  2 siblings, 1 reply; 29+ messages in thread
From: Tassilo Horn @ 2011-01-10 21:47 UTC (permalink / raw)
  To: emacs-devel

Hi all,

I've just tried to add some debug statements to one of the MagickWand
example programs (see below).  When I invoke that program on some very
large TIF (~300 MB) or PNG file, the memory consumption shortly
increases, but after destroying the MagickWand and calling
MagickWandTerminus(), all memory is freed.

Here's the code:

--8<---------------cut here---------------start------------->8---
#include <stdio.h>
#include <stdlib.h>
#include <wand/MagickWand.h>

int main(int argc,char **argv)
{
  MagickBooleanType status;
  
  MagickWand *magick_wand;
  
  if (argc != 3)
    {
      (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
      exit(0);
    }

  MagickWandGenesis();
  magick_wand=NewMagickWand();
  fprintf(stdout,"Created magick wand.\n");
  status=MagickReadImage(magick_wand,argv[1]);

  MagickResetIterator(magick_wand);
  while (MagickNextImage(magick_wand) != MagickFalse)
    MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0);

  status=MagickWriteImages(magick_wand,argv[2],MagickTrue);
  magick_wand=DestroyMagickWand(magick_wand);
  MagickWandTerminus();

  fprintf(stdout,"Terminated magick wand & sleeping 20 secs.\n");

  sleep (20);

  fprintf(stdout,"Bye.\n");

  return(0);
}
--8<---------------cut here---------------end--------------->8---

Currently, I cannot see where's the difference between that code and the
one in image.c...

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-10 21:47 ` Tassilo Horn
@ 2011-01-11  8:47   ` Tassilo Horn
  2011-01-11  9:35     ` joakim
  0 siblings, 1 reply; 29+ messages in thread
From: Tassilo Horn @ 2011-01-11  8:47 UTC (permalink / raw)
  To: emacs-devel

Hi all,

this is driving me nuts.  I've already tried modifying
imagemagick_load_image() with some messages, and so that it always does
MagickWandGenesis() first and MagickWandTerminus() after destroying the
last MagickWand.  It does so, but that didn't help...

One strangeness I found is the line

    image_error ("im read failed", Qnil, Qnil);

which is called unconditionally in imagemagick_load_image().  Why?

Anyway, that cannot be the culprit.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11  8:47   ` Tassilo Horn
@ 2011-01-11  9:35     ` joakim
  2011-01-11  9:53       ` Tassilo Horn
  2011-01-11  9:54       ` joakim
  0 siblings, 2 replies; 29+ messages in thread
From: joakim @ 2011-01-11  9:35 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: emacs-devel

Tassilo Horn <tassilo@member.fsf.org> writes:

> Hi all,
>
> this is driving me nuts.  I've already tried modifying
> imagemagick_load_image() with some messages, and so that it always does
> MagickWandGenesis() first and MagickWandTerminus() after destroying the
> last MagickWand.  It does so, but that didn't help...
>
> One strangeness I found is the line
>
>     image_error ("im read failed", Qnil, Qnil);
>
> which is called unconditionally in imagemagick_load_image().  Why?

Thats supposed to be an error condition exit only.
Isnt there a return statement before?

I havent yet tried to recreate your problem, but my experience when I
worked on the patch was that I got memory issues when working with image
bundle files.

Also the imagemagick team was very helpful in providing fixes in their
code.

Have you tried to install a development version of imagemagick?

>
> Anyway, that cannot be the culprit.
>
> Bye,
> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11  9:35     ` joakim
@ 2011-01-11  9:53       ` Tassilo Horn
  2011-01-11  9:54       ` joakim
  1 sibling, 0 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-11  9:53 UTC (permalink / raw)
  To: joakim; +Cc: emacs-devel

joakim@verona.se writes:

Hi Joakim,

>> this is driving me nuts.  I've already tried modifying
>> imagemagick_load_image() with some messages, and so that it always
>> does MagickWandGenesis() first and MagickWandTerminus() after
>> destroying the last MagickWand.  It does so, but that didn't help...

[patch below]

>> One strangeness I found is the line
>>
>>     image_error ("im read failed", Qnil, Qnil);
>>
>> which is called unconditionally in imagemagick_load_image().  Why?
>
> Thats supposed to be an error condition exit only.
> Isnt there a return statement before?

No, neither before nor after.

> I havent yet tried to recreate your problem, but my experience when I
> worked on the patch was that I got memory issues when working with
> image bundle files.

That's not the case here.  I load one single PNG (or whatever) file, or
in the case of doc-view, several PNG files one after the other.

> Also the imagemagick team was very helpful in providing fixes in their
> code.

I tried to get in contact, but my posting via Gmane was rejected and I
got no response on ##imagemagick.  Then I tried to register with their
web forum, but I still haven't got the confirmation mail...

> Have you tried to install a development version of imagemagick?

No, I'm running the released version 6.6.5.6.  And as I've said in
another mail, the MagickWand example code with my small changes works
just fine with that version, i.e., memory is given back...

And the basic order of MagickWand function invocations applied in emacs
seems to match the example.  Maybe some emacs/X structures share data
with MagickWand structures, so that the latter cannot be freed when
destroying the MagickWand or calling MagickWandTerminus?

Bye,
Tassilo

Here's a patch with my unsuccessful changes to image.c.  Maybe it's of
some use...

--8<---------------cut here---------------start------------->8---
=== modified file 'src/image.c'
--- src/image.c	2011-01-07 22:33:32 +0000
+++ src/image.c	2011-01-11 08:11:07 +0000
@@ -7521,9 +7521,12 @@
      image.  Interface :index is same as for GIF.  First we "ping" the
      image to see how many sub-images it contains. Pinging is faster
      than loading the image to find out things about it.  */
+  MagickWandGenesis ();
+  message ("MagickWandGenesis ();");
   image = image_spec_value (img->spec, QCindex, NULL);
   ino = INTEGERP (image) ? XFASTINT (image) : 0;
   ping_wand = NewMagickWand ();
+  message ("ping_wand = NewMagickWand ();");
   MagickSetResolution (ping_wand, 2, 2);
   if (filename != NULL)
     {
@@ -7539,6 +7542,7 @@
       image_error ("Invalid image number `%s' in image `%s'",
 		   image, img->spec);
       DestroyMagickWand (ping_wand);
+      message ("DestroyMagickWand (ping_wand);");
       return 0;
     }
 
@@ -7549,6 +7553,9 @@
                     img->data.lisp_val));
 
   DestroyMagickWand (ping_wand);
+  message ("DestroyMagickWand (ping_wand);");
+
+
   /* Now, after pinging, we know how many images are inside the
      file. If its not a bundle, just one.  */
 
@@ -7566,6 +7573,7 @@
       if (im_image != NULL)
 	{
 	  image_wand = NewMagickWandFromImage (im_image);
+	  message ("image_wand = NewMagickWand ();");
 	  status = MagickTrue;
 	}
       else
@@ -7574,6 +7582,7 @@
   else
     {
       image_wand = NewMagickWand ();
+      message ("image_wand = NewMagickWand ();");
       status = MagickReadImageBlob (image_wand, contents, size);
     }
   image_error ("im read failed", Qnil, Qnil);
@@ -7805,11 +7814,18 @@
 
   /* Final cleanup. image_wand should be the only resource left. */
   DestroyMagickWand (image_wand);
+  message ("DestroyMagickWand (image_wand);");
+  MagickWandTerminus ();
+  message ("MagickWandTerminus ();");
 
   return 1;
 
  imagemagick_error:
   DestroyMagickWand (image_wand);
+  message ("Error case: DestroyMagickWand (image_wand);");
+  MagickWandTerminus ();
+  message ("MagickWandTerminus ();");
+
   /* TODO more cleanup.  */
   image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec, Qnil);
   return 0;
@@ -8681,8 +8697,6 @@
 #if defined (HAVE_IMAGEMAGICK)
   if (EQ (type, Qimagemagick))
     {
-      /* MagickWandGenesis() initializes the imagemagick library.  */
-      MagickWandGenesis ();
       return CHECK_LIB_AVAILABLE (&imagemagick_type, init_imagemagick_functions,
 				  libraries);
     }
--8<---------------cut here---------------end--------------->8---



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11  9:35     ` joakim
  2011-01-11  9:53       ` Tassilo Horn
@ 2011-01-11  9:54       ` joakim
  1 sibling, 0 replies; 29+ messages in thread
From: joakim @ 2011-01-11  9:54 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: emacs-devel

joakim@verona.se writes:

> Tassilo Horn <tassilo@member.fsf.org> writes:
>
>> Hi all,
>>
>> this is driving me nuts.  I've already tried modifying
>> imagemagick_load_image() with some messages, and so that it always does
>> MagickWandGenesis() first and MagickWandTerminus() after destroying the
>> last MagickWand.  It does so, but that didn't help...
>>
>> One strangeness I found is the line
>>
>>     image_error ("im read failed", Qnil, Qnil);
>>
>> which is called unconditionally in imagemagick_load_image().  Why?
>
> Thats supposed to be an error condition exit only.
> Isnt there a return statement before?
>
> I havent yet tried to recreate your problem, but my experience when I
> worked on the patch was that I got memory issues when working with image
> bundle files.

I was able to recreate the problem now.

Ill try a newer IM and if it persists contact the IM team.

>
> Also the imagemagick team was very helpful in providing fixes in their
> code.
>
> Have you tried to install a development version of imagemagick?
>
>>
>> Anyway, that cannot be the culprit.
>>
>> Bye,
>> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-10 14:36               ` Jashy
@ 2011-01-11 10:14                 ` Jashy
  0 siblings, 0 replies; 29+ messages in thread
From: Jashy @ 2011-01-11 10:14 UTC (permalink / raw)
  To: Emacs-devel


Here I give a test result. I am using pmap emacs_process_id to get memory
data.
| Emacs Started | Open PDF | 10 times -+ | Kill PDF buffer |
|a.txt | b.txt |c.txt |d.txt|

You can most memory is in [ anon ] parts, but I do not know what's [ anon ]
mean. 

a.txt
=====
25704:   emacs -fs
08048000   1924K r-x--  /usr/bin/emacs
08229000   5836K rw---  /usr/bin/emacs
09ff2000  10076K rw---    [ anon ]
b49e5000     48K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoBd.ttf
b49f1000     56K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
b49ff000     52K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf
b4a0c000    296K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf
b4a57000    228K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Oblique.ttf
b4a90000    352K rw---    [ anon ]
b4ae8000  16400K r----  /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc
b5aec000    620K r----  /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf
b5b87000      8K r-x--  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b89000      4K rw---  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b8a000    384K rw-s-    [ shmid=0x2f0021 ]
b5bea000    316K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
b5c39000      4K r--s- 
/var/cache/fontconfig/c05880de57d1f5e948fdfacc138775d9-le32d4.cache-3
b5c3a000     24K r--s- 
/var/cache/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le32d4.cache-3
b5c40000      8K r--s- 
/var/cache/fontconfig/99e8ed0e538f840c565b6ed5dad60d56-le32d4.cache-3
b5c42000      4K r--s- 
/var/cache/fontconfig/0fafd173547752dce4dee1a69e0b3c95-le32d4.cache-3
b5c43000     12K r--s- 
/var/cache/fontconfig/a46337af8a0b4c9b317ad981ec3bdf87-le32d4.cache-3
b5c46000      8K r--s- 
/var/cache/fontconfig/b5ea634b0fb353b8ea17632d1f9ef766-le32d4.cache-3
b5c48000     16K r--s- 
/var/cache/fontconfig/926e794c3d5e5dffcaf2fa83ef8d36c2-le32d4.cache-3
b5c4c000     12K r--s- 
/var/cache/fontconfig/6eb3985aa4124903f6ff08ba781cd364-le32d4.cache-3
b5c4f000      4K r--s- 
/var/cache/fontconfig/7ee55724f82591cb35c3d9771e9e69ed-le32d4.cache-3
b5c50000     28K r--s- 
/var/cache/fontconfig/6d41288fd70b0be22e8c3a91e032eec0-le32d4.cache-3
b5c57000     12K r--s- 
/var/cache/fontconfig/de156ccd2eddbdc19d37a45b8b2aac9c-le32d4.cache-3
b5c5a000      4K r--s- 
/var/cache/fontconfig/4794a0821666d79190d59a36cb4f44b5-le32d4.cache-3
b5c5b000     44K r--s- 
/var/cache/fontconfig/393be3659170ead87bc7d2aed521dc5c-le32d4.cache-3
b5c66000    136K r--s- 
/var/cache/fontconfig/365b55f210c0a22e9a19e35191240f32-le32d4.cache-3
b5c88000     32K r--s- 
/var/cache/fontconfig/d52a8644073d54c13679302ca1180695-le32d4.cache-3
b5c90000     40K r--s- 
/var/cache/fontconfig/089dead882dea3570ffc31a9898cfb69-le32d4.cache-3
b5c9a000     12K r--s- 
/var/cache/fontconfig/cabbd14511b9e8a55e92af97fb3a0461-le32d4.cache-3
b5c9d000     56K r--s- 
/var/cache/fontconfig/e13b20fdb08344e0e664864cc2ede53d-le32d4.cache-3
b5cab000    168K r-x--  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd5000      4K rw---  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd6000     52K r-x--  /usr/lib/libtdb.so.1.2.1
b5ce3000      4K rw---  /usr/lib/libtdb.so.1.2.1
b5ce4000     20K r-x--  /usr/lib/libogg.so.0.7.0
b5ce9000      4K rw---  /usr/lib/libogg.so.0.7.0
b5cea000    156K r-x--  /usr/lib/libvorbis.so.0.4.4
b5d11000      4K rw---  /usr/lib/libvorbis.so.0.4.4
b5d12000     56K r-x--  /usr/lib/libcanberra.so.0.2.3
b5d20000      4K rw---  /usr/lib/libcanberra.so.0.2.3
b5d29000      4K r-x--  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2a000      4K rw---  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2c000      4K r--s- 
/var/cache/fontconfig/2d5a79be9318de81426c36994d1f7ea0-le32d4.cache-3
b5d2d000     56K r--s- 
/var/cache/fontconfig/865f88548240fee46819705c6468c165-le32d4.cache-3
b5d3b000     32K r-x--  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d43000      4K r----  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d44000      4K rw---  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d45000     76K r-x--  /lib/i686/cmov/libnsl-2.11.2.so
b5d58000      4K r----  /lib/i686/cmov/libnsl-2.11.2.so
b5d59000      4K rw---  /lib/i686/cmov/libnsl-2.11.2.so
b5d5a000      8K rw---    [ anon ]
b5d5c000     24K r-x--  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d62000      4K r----  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d63000      4K rw---  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d64000     40K r-x--  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6e000      4K r----  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6f000      4K rw---  /lib/i686/cmov/libnss_files-2.11.2.so
b5d70000   1600K r----  /usr/lib/locale/locale-archive
b5f00000   2048K r----  /usr/lib/locale/locale-archive
b6100000     16K rw---    [ anon ]
b6104000     12K r-x--  /usr/lib/libgpg-error.so.0.4.0
b6107000      4K rw---  /usr/lib/libgpg-error.so.0.4.0
b6108000     16K r-x--  /usr/lib/libdatrie.so.1.1.0
b610c000      4K rw---  /usr/lib/libdatrie.so.1.1.0
b610d000     16K r-x--  /usr/lib/libXdmcp.so.6.0.0
b6111000      4K rw---  /usr/lib/libXdmcp.so.6.0.0
b6112000      8K r-x--  /usr/lib/libXau.so.6.0.0
b6114000      4K rw---  /usr/lib/libXau.so.6.0.0
b6115000      4K rw---    [ anon ]
b6116000    452K r-x--  /usr/lib/libgcrypt.so.11.5.3
b6187000     12K rw---  /usr/lib/libgcrypt.so.11.5.3
b618a000     60K r-x--  /usr/lib/libtasn1.so.3.1.9
b6199000      4K rw---  /usr/lib/libtasn1.so.3.1.9
b619a000     28K r-x--  /usr/lib/libthai.so.0.1.6
b61a1000      4K rw---  /usr/lib/libthai.so.0.1.6
b61a2000    120K r-x--  /usr/lib/libdbus-glib-1.so.2.1.0
b61c0000      4K rw---  /usr/lib/libdbus-glib-1.so.2.1.0
b61c1000    296K r-x--  /usr/lib/libORBit-2.so.0.1.0
b620b000     36K rw---  /usr/lib/libORBit-2.so.0.1.0
b6214000      8K rw---    [ anon ]
b6216000     28K r-x--  /usr/lib/libltdl.so.7.2.1
b621d000      4K rw---  /usr/lib/libltdl.so.7.2.1
b621e000     64K r-x--  /lib/libbz2.so.1.0.4
b622e000      4K rw---  /lib/libbz2.so.1.0.4
b622f000    312K r-x--  /usr/lib/libXt.so.6.0.0
b627d000     16K rw---  /usr/lib/libXt.so.6.0.0
b6281000     64K r-x--  /usr/lib/liblqr-1.so.0.3.1
b6291000      4K rw---  /usr/lib/liblqr-1.so.0.3.1
b6292000    192K r-x--  /usr/lib/liblcms.so.1.0.18
b62c2000      8K rw---  /usr/lib/liblcms.so.1.0.18
b62c4000     12K rw---    [ anon ]
b62c7000    204K r-x--  /usr/lib/libcroco-0.6.so.3.0.1
b62fa000     12K rw---  /usr/lib/libcroco-0.6.so.3.0.1
b62fd000    212K r-x--  /usr/lib/libgsf-1.so.114.0.18
b6332000     12K rw---  /usr/lib/libgsf-1.so.114.0.18
b6335000      4K rw---    [ anon ]
b6336000     12K r-x--  /lib/libuuid.so.1.3.0
b6339000      4K rw---  /lib/libuuid.so.1.3.0
b633a000    144K r-x--  /usr/lib/libexpat.so.1.5.2
b635e000      8K rw---  /usr/lib/libexpat.so.1.5.2
b6360000      4K rw---    [ anon ]
b6361000    100K r-x--  /lib/libselinux.so.1
b637a000      4K r----  /lib/libselinux.so.1
b637b000      4K rw---  /lib/libselinux.so.1
b637c000     64K r-x--  /lib/i686/cmov/libresolv-2.11.2.so
b638c000      4K r----  /lib/i686/cmov/libresolv-2.11.2.so
b638d000      4K rw---  /lib/i686/cmov/libresolv-2.11.2.so
b638e000      8K rw---    [ anon ]
b6390000    200K r-x--  /lib/libpcre.so.3.12.1
b63c2000      4K rw---  /lib/libpcre.so.3.12.1
b63c3000      8K r-x--  /lib/i686/cmov/libdl-2.11.2.so
b63c5000      4K r----  /lib/i686/cmov/libdl-2.11.2.so
b63c6000      4K rw---  /lib/i686/cmov/libdl-2.11.2.so
b63c7000     96K r-x--  /usr/lib/libxcb.so.1.1.0
b63df000      4K rw---  /usr/lib/libxcb.so.1.1.0
b63e0000      4K rw---    [ anon ]
b63e1000     24K r-x--  /usr/lib/libxcb-render.so.0.0.0
b63e7000      4K rw---  /usr/lib/libxcb-render.so.0.0.0
b63e8000     12K r-x--  /usr/lib/libxcb-render-util.so.0.0.0
b63eb000      4K rw---  /usr/lib/libxcb-render-util.so.0.0.0
b63ec000    348K r-x--  /usr/lib/libpixman-1.so.0.16.4
b6443000      8K rw---  /usr/lib/libpixman-1.so.0.16.4
b6445000     32K r-x--  /usr/lib/libXcursor.so.1.0.2
b644d000      4K rw---  /usr/lib/libXcursor.so.1.0.2
b644e000     24K r-x--  /usr/lib/libXrandr.so.2.2.0
b6454000      4K rw---  /usr/lib/libXrandr.so.2.2.0
b6455000      4K rw---    [ anon ]
b6456000     48K r-x--  /usr/lib/libXi.so.6.1.0
b6462000      4K rw---  /usr/lib/libXi.so.6.1.0
b6463000      8K r-x--  /usr/lib/libXinerama.so.1.0.0
b6465000      4K rw---  /usr/lib/libXinerama.so.1.0.0
b6466000     56K r-x--  /usr/lib/libXext.so.6.4.0
b6474000      4K rw---  /usr/lib/libXext.so.6.4.0
b6475000     16K r-x--  /usr/lib/libXfixes.so.3.1.0
b6479000      4K rw---  /usr/lib/libXfixes.so.3.1.0
b647a000      8K r-x--  /usr/lib/libXdamage.so.1.1.0
b647c000      4K rw---  /usr/lib/libXdamage.so.1.1.0
b647d000      4K rw---    [ anon ]
b647e000      8K r-x--  /usr/lib/libXcomposite.so.1.0.0
b6480000      4K rw---  /usr/lib/libXcomposite.so.1.0.0
b6481000     48K r-x--  /usr/lib/libgomp.so.1.0.0
b648d000      4K rw---  /usr/lib/libgomp.so.1.0.0
b648e000   1280K r-x--  /lib/i686/cmov/libc-2.11.2.so
b65ce000      8K r----  /lib/i686/cmov/libc-2.11.2.so
b65d0000      4K rw---  /lib/i686/cmov/libc-2.11.2.so
b65d1000     12K rw---    [ anon ]
b65d4000    592K r-x--  /usr/lib/libgnutls.so.26.14.12
b6668000     16K rw---  /usr/lib/libgnutls.so.26.14.12
b666c000    112K r-x--  /usr/lib/libm17n-core.so.0.4.0
b6688000      4K rw---  /usr/lib/libm17n-core.so.0.4.0
b6689000     36K rw---    [ anon ]
b6692000     36K r-x--  /usr/lib/libm17n-flt.so.0.4.0
b669b000      4K rw---  /usr/lib/libm17n-flt.so.0.4.0
b669c000     76K r-x--  /usr/lib/libotf.so.0.0.0
b66af000      4K rw---  /usr/lib/libotf.so.0.0.0
b66b0000    192K r-x--  /usr/lib/libgconf-2.so.4.1.5
b66e0000     12K rw---  /usr/lib/libgconf-2.so.4.1.5
b66e3000    220K r-x--  /lib/libncurses.so.5.7
b671a000     12K rw---  /lib/libncurses.so.5.7
b671d000     20K r-x--  /usr/lib/libgpm.so.2.0.0
b6722000      4K rw---  /usr/lib/libgpm.so.2.0.0
b6723000   1168K r-x--  /usr/lib/libxml2.so.2.7.8
b6847000     20K rw---  /usr/lib/libxml2.so.2.7.8
b684c000      8K rw---    [ anon ]
b684e000    224K r-x--  /lib/libdbus-1.so.3.4.0
b6886000      4K r----  /lib/libdbus-1.so.3.4.0
b6887000      4K rw---  /lib/libdbus-1.so.3.4.0
b6888000   1912K r-x--  /usr/lib/libMagickCore.so.3.0.0
b6a66000    320K rw---  /usr/lib/libMagickCore.so.3.0.0
b6ab6000     96K rw---    [ anon ]
b6ace000   1088K r-x--  /usr/lib/libMagickWand.so.3.0.0
b6bde000      8K rw---  /usr/lib/libMagickWand.so.3.0.0
b6be0000    200K r-x--  /usr/lib/librsvg-2.so.2.26.3
b6c12000      4K rw---  /usr/lib/librsvg-2.so.2.26.3
b6c13000    784K r-x--  /usr/lib/libasound.so.2.0.0
b6cd7000     16K rw---  /usr/lib/libasound.so.2.0.0
b6cdb000      4K rw---    [ anon ]
b6cdc000     72K r-x--  /usr/lib/libXft.so.2.1.13
b6cee000      4K rw---  /usr/lib/libXft.so.2.1.13
b6cef000     32K r-x--  /usr/lib/libXrender.so.1.3.0
b6cf7000      4K rw---  /usr/lib/libXrender.so.1.3.0
b6cf8000   1124K r-x--  /usr/lib/libX11.so.6.3.0
b6e11000     16K rw---  /usr/lib/libX11.so.6.3.0
b6e15000     60K r-x--  /usr/lib/libXpm.so.4.11.0
b6e24000      4K rw---  /usr/lib/libXpm.so.4.11.0
b6e25000     28K r-x--  /usr/lib/libgif.so.4.1.6
b6e2c000      4K rw---  /usr/lib/libgif.so.4.1.6
b6e2d000     76K r-x--  /usr/lib/libz.so.1.2.3.4
b6e40000      4K rw---  /usr/lib/libz.so.1.2.3.4
b6e41000      4K rw---    [ anon ]
b6e42000    140K r-x--  /lib/libpng12.so.0.44.0
b6e65000      4K rw---  /lib/libpng12.so.0.44.0
b6e66000    124K r-x--  /usr/lib/libjpeg.so.62.0.0
b6e85000      4K rw---  /usr/lib/libjpeg.so.62.0.0
b6e86000    356K r-x--  /usr/lib/libtiff.so.4.3.3
b6edf000      8K rw---  /usr/lib/libtiff.so.4.3.3
b6ee1000     80K r-x--  /usr/lib/libICE.so.6.3.0
b6ef5000      8K rw---  /usr/lib/libICE.so.6.3.0
b6ef7000      4K rw---    [ anon ]
b6ef8000     28K r-x--  /usr/lib/libSM.so.6.0.1
b6eff000      4K rw---  /usr/lib/libSM.so.6.0.1
b6f00000     84K r-x--  /lib/i686/cmov/libpthread-2.11.2.so
b6f15000      4K r----  /lib/i686/cmov/libpthread-2.11.2.so
b6f16000      4K rw---  /lib/i686/cmov/libpthread-2.11.2.so
b6f17000     12K rw---    [ anon ]
b6f1a000    800K r-x--  /lib/libglib-2.0.so.0.2400.2
b6fe2000      4K rw---  /lib/libglib-2.0.so.0.2400.2
b6fe3000     28K r-x--  /lib/i686/cmov/librt-2.11.2.so
b6fea000      4K r----  /lib/i686/cmov/librt-2.11.2.so
b6feb000      4K rw---  /lib/i686/cmov/librt-2.11.2.so
b6fec000     16K r-x--  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff0000      4K rw---  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff1000     12K r-x--  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff4000      4K rw---  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff5000    244K r-x--  /usr/lib/libgobject-2.0.so.0.2400.2
b7032000      4K rw---  /usr/lib/libgobject-2.0.so.0.2400.2
b7033000      4K rw---    [ anon ]
b7034000    180K r-x--  /usr/lib/libfontconfig.so.1.4.4
b7061000      8K rw---  /usr/lib/libfontconfig.so.1.4.4
b7063000    460K r-x--  /usr/lib/libfreetype.so.6.6.0
b70d6000     16K rw---  /usr/lib/libfreetype.so.6.6.0
b70da000    264K r-x--  /usr/lib/libpango-1.0.so.0.2800.3
b711c000      8K rw---  /usr/lib/libpango-1.0.so.0.2800.3
b711e000    616K r-x--  /usr/lib/libgio-2.0.so.0.2400.2
b71b8000      8K rw---  /usr/lib/libgio-2.0.so.0.2400.2
b71ba000    460K r-x--  /usr/lib/libcairo.so.2.10800.10
b722d000      8K rw---  /usr/lib/libcairo.so.2.10800.10
b722f000      4K rw---    [ anon ]
b7230000     40K r-x--  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723a000      4K rw---  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723b000    144K r-x--  /lib/i686/cmov/libm-2.11.2.so
b725f000      4K r----  /lib/i686/cmov/libm-2.11.2.so
b7260000      4K rw---  /lib/i686/cmov/libm-2.11.2.so
b7261000     96K r-x--  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b7279000      4K rw---  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b727a000    148K r-x--  /usr/lib/libpangoft2-1.0.so.0.2800.3
b729f000      4K rw---  /usr/lib/libpangoft2-1.0.so.0.2800.3
b72a0000    104K r-x--  /usr/lib/libatk-1.0.so.0.3009.1
b72ba000      8K rw---  /usr/lib/libatk-1.0.so.0.3009.1
b72bc000      4K rw---    [ anon ]
b72bd000    588K r-x--  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7350000     12K rw---  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7353000   3900K r-x--  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7722000     24K rw---  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7728000      4K rw---    [ anon ]
b7729000     28K r-x--  /usr/lib/libvorbisfile.so.3.3.2
b7730000      4K rw---  /usr/lib/libvorbisfile.so.3.3.2
b7731000     16K r-x--  /usr/lib/libcanberra-gtk.so.0.1.6
b7735000      4K rw---  /usr/lib/libcanberra-gtk.so.0.1.6
b7736000     20K r-x--  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773b000      4K rw---  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773c000     28K r--s-  /usr/lib/gconv/gconv-modules.cache
b7743000      8K rw---    [ anon ]
b7745000      4K r-x--    [ anon ]
b7746000    108K r-x--  /lib/ld-2.11.2.so
b7761000      4K r----  /lib/ld-2.11.2.so
b7762000      4K rw---  /lib/ld-2.11.2.so
bf8ff000    504K rw---    [ stack ]
 total    64884K

b.txt
=====
25704:   emacs -fs
08048000   1924K r-x--  /usr/bin/emacs
08229000   5836K rw---  /usr/bin/emacs
09ff2000  10076K rw---    [ anon ]
b3f65000   9812K rw---    [ anon ]
b4942000    652K rw---    [ anon ]
b49e5000     48K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoBd.ttf
b49f1000     56K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
b49ff000     52K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf
b4a0c000    296K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf
b4a57000    228K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Oblique.ttf
b4a90000    352K rw---    [ anon ]
b4ae8000  16400K r----  /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc
b5aec000    620K r----  /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf
b5b87000      8K r-x--  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b89000      4K rw---  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b8a000    384K rw-s-    [ shmid=0x2f0021 ]
b5bea000    316K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
b5c39000      4K r--s- 
/var/cache/fontconfig/c05880de57d1f5e948fdfacc138775d9-le32d4.cache-3
b5c3a000     24K r--s- 
/var/cache/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le32d4.cache-3
b5c40000      8K r--s- 
/var/cache/fontconfig/99e8ed0e538f840c565b6ed5dad60d56-le32d4.cache-3
b5c42000      4K r--s- 
/var/cache/fontconfig/0fafd173547752dce4dee1a69e0b3c95-le32d4.cache-3
b5c43000     12K r--s- 
/var/cache/fontconfig/a46337af8a0b4c9b317ad981ec3bdf87-le32d4.cache-3
b5c46000      8K r--s- 
/var/cache/fontconfig/b5ea634b0fb353b8ea17632d1f9ef766-le32d4.cache-3
b5c48000     16K r--s- 
/var/cache/fontconfig/926e794c3d5e5dffcaf2fa83ef8d36c2-le32d4.cache-3
b5c4c000     12K r--s- 
/var/cache/fontconfig/6eb3985aa4124903f6ff08ba781cd364-le32d4.cache-3
b5c4f000      4K r--s- 
/var/cache/fontconfig/7ee55724f82591cb35c3d9771e9e69ed-le32d4.cache-3
b5c50000     28K r--s- 
/var/cache/fontconfig/6d41288fd70b0be22e8c3a91e032eec0-le32d4.cache-3
b5c57000     12K r--s- 
/var/cache/fontconfig/de156ccd2eddbdc19d37a45b8b2aac9c-le32d4.cache-3
b5c5a000      4K r--s- 
/var/cache/fontconfig/4794a0821666d79190d59a36cb4f44b5-le32d4.cache-3
b5c5b000     44K r--s- 
/var/cache/fontconfig/393be3659170ead87bc7d2aed521dc5c-le32d4.cache-3
b5c66000    136K r--s- 
/var/cache/fontconfig/365b55f210c0a22e9a19e35191240f32-le32d4.cache-3
b5c88000     32K r--s- 
/var/cache/fontconfig/d52a8644073d54c13679302ca1180695-le32d4.cache-3
b5c90000     40K r--s- 
/var/cache/fontconfig/089dead882dea3570ffc31a9898cfb69-le32d4.cache-3
b5c9a000     12K r--s- 
/var/cache/fontconfig/cabbd14511b9e8a55e92af97fb3a0461-le32d4.cache-3
b5c9d000     56K r--s- 
/var/cache/fontconfig/e13b20fdb08344e0e664864cc2ede53d-le32d4.cache-3
b5cab000    168K r-x--  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd5000      4K rw---  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd6000     52K r-x--  /usr/lib/libtdb.so.1.2.1
b5ce3000      4K rw---  /usr/lib/libtdb.so.1.2.1
b5ce4000     20K r-x--  /usr/lib/libogg.so.0.7.0
b5ce9000      4K rw---  /usr/lib/libogg.so.0.7.0
b5cea000    156K r-x--  /usr/lib/libvorbis.so.0.4.4
b5d11000      4K rw---  /usr/lib/libvorbis.so.0.4.4
b5d12000     56K r-x--  /usr/lib/libcanberra.so.0.2.3
b5d20000      4K rw---  /usr/lib/libcanberra.so.0.2.3
b5d29000      4K r-x--  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2a000      4K rw---  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2c000      4K r--s- 
/var/cache/fontconfig/2d5a79be9318de81426c36994d1f7ea0-le32d4.cache-3
b5d2d000     56K r--s- 
/var/cache/fontconfig/865f88548240fee46819705c6468c165-le32d4.cache-3
b5d3b000     32K r-x--  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d43000      4K r----  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d44000      4K rw---  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d45000     76K r-x--  /lib/i686/cmov/libnsl-2.11.2.so
b5d58000      4K r----  /lib/i686/cmov/libnsl-2.11.2.so
b5d59000      4K rw---  /lib/i686/cmov/libnsl-2.11.2.so
b5d5a000      8K rw---    [ anon ]
b5d5c000     24K r-x--  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d62000      4K r----  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d63000      4K rw---  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d64000     40K r-x--  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6e000      4K r----  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6f000      4K rw---  /lib/i686/cmov/libnss_files-2.11.2.so
b5d70000   1600K r----  /usr/lib/locale/locale-archive
b5f00000   2048K r----  /usr/lib/locale/locale-archive
b6100000     16K rw---    [ anon ]
b6104000     12K r-x--  /usr/lib/libgpg-error.so.0.4.0
b6107000      4K rw---  /usr/lib/libgpg-error.so.0.4.0
b6108000     16K r-x--  /usr/lib/libdatrie.so.1.1.0
b610c000      4K rw---  /usr/lib/libdatrie.so.1.1.0
b610d000     16K r-x--  /usr/lib/libXdmcp.so.6.0.0
b6111000      4K rw---  /usr/lib/libXdmcp.so.6.0.0
b6112000      8K r-x--  /usr/lib/libXau.so.6.0.0
b6114000      4K rw---  /usr/lib/libXau.so.6.0.0
b6115000      4K rw---    [ anon ]
b6116000    452K r-x--  /usr/lib/libgcrypt.so.11.5.3
b6187000     12K rw---  /usr/lib/libgcrypt.so.11.5.3
b618a000     60K r-x--  /usr/lib/libtasn1.so.3.1.9
b6199000      4K rw---  /usr/lib/libtasn1.so.3.1.9
b619a000     28K r-x--  /usr/lib/libthai.so.0.1.6
b61a1000      4K rw---  /usr/lib/libthai.so.0.1.6
b61a2000    120K r-x--  /usr/lib/libdbus-glib-1.so.2.1.0
b61c0000      4K rw---  /usr/lib/libdbus-glib-1.so.2.1.0
b61c1000    296K r-x--  /usr/lib/libORBit-2.so.0.1.0
b620b000     36K rw---  /usr/lib/libORBit-2.so.0.1.0
b6214000      8K rw---    [ anon ]
b6216000     28K r-x--  /usr/lib/libltdl.so.7.2.1
b621d000      4K rw---  /usr/lib/libltdl.so.7.2.1
b621e000     64K r-x--  /lib/libbz2.so.1.0.4
b622e000      4K rw---  /lib/libbz2.so.1.0.4
b622f000    312K r-x--  /usr/lib/libXt.so.6.0.0
b627d000     16K rw---  /usr/lib/libXt.so.6.0.0
b6281000     64K r-x--  /usr/lib/liblqr-1.so.0.3.1
b6291000      4K rw---  /usr/lib/liblqr-1.so.0.3.1
b6292000    192K r-x--  /usr/lib/liblcms.so.1.0.18
b62c2000      8K rw---  /usr/lib/liblcms.so.1.0.18
b62c4000     12K rw---    [ anon ]
b62c7000    204K r-x--  /usr/lib/libcroco-0.6.so.3.0.1
b62fa000     12K rw---  /usr/lib/libcroco-0.6.so.3.0.1
b62fd000    212K r-x--  /usr/lib/libgsf-1.so.114.0.18
b6332000     12K rw---  /usr/lib/libgsf-1.so.114.0.18
b6335000      4K rw---    [ anon ]
b6336000     12K r-x--  /lib/libuuid.so.1.3.0
b6339000      4K rw---  /lib/libuuid.so.1.3.0
b633a000    144K r-x--  /usr/lib/libexpat.so.1.5.2
b635e000      8K rw---  /usr/lib/libexpat.so.1.5.2
b6360000      4K rw---    [ anon ]
b6361000    100K r-x--  /lib/libselinux.so.1
b637a000      4K r----  /lib/libselinux.so.1
b637b000      4K rw---  /lib/libselinux.so.1
b637c000     64K r-x--  /lib/i686/cmov/libresolv-2.11.2.so
b638c000      4K r----  /lib/i686/cmov/libresolv-2.11.2.so
b638d000      4K rw---  /lib/i686/cmov/libresolv-2.11.2.so
b638e000      8K rw---    [ anon ]
b6390000    200K r-x--  /lib/libpcre.so.3.12.1
b63c2000      4K rw---  /lib/libpcre.so.3.12.1
b63c3000      8K r-x--  /lib/i686/cmov/libdl-2.11.2.so
b63c5000      4K r----  /lib/i686/cmov/libdl-2.11.2.so
b63c6000      4K rw---  /lib/i686/cmov/libdl-2.11.2.so
b63c7000     96K r-x--  /usr/lib/libxcb.so.1.1.0
b63df000      4K rw---  /usr/lib/libxcb.so.1.1.0
b63e0000      4K rw---    [ anon ]
b63e1000     24K r-x--  /usr/lib/libxcb-render.so.0.0.0
b63e7000      4K rw---  /usr/lib/libxcb-render.so.0.0.0
b63e8000     12K r-x--  /usr/lib/libxcb-render-util.so.0.0.0
b63eb000      4K rw---  /usr/lib/libxcb-render-util.so.0.0.0
b63ec000    348K r-x--  /usr/lib/libpixman-1.so.0.16.4
b6443000      8K rw---  /usr/lib/libpixman-1.so.0.16.4
b6445000     32K r-x--  /usr/lib/libXcursor.so.1.0.2
b644d000      4K rw---  /usr/lib/libXcursor.so.1.0.2
b644e000     24K r-x--  /usr/lib/libXrandr.so.2.2.0
b6454000      4K rw---  /usr/lib/libXrandr.so.2.2.0
b6455000      4K rw---    [ anon ]
b6456000     48K r-x--  /usr/lib/libXi.so.6.1.0
b6462000      4K rw---  /usr/lib/libXi.so.6.1.0
b6463000      8K r-x--  /usr/lib/libXinerama.so.1.0.0
b6465000      4K rw---  /usr/lib/libXinerama.so.1.0.0
b6466000     56K r-x--  /usr/lib/libXext.so.6.4.0
b6474000      4K rw---  /usr/lib/libXext.so.6.4.0
b6475000     16K r-x--  /usr/lib/libXfixes.so.3.1.0
b6479000      4K rw---  /usr/lib/libXfixes.so.3.1.0
b647a000      8K r-x--  /usr/lib/libXdamage.so.1.1.0
b647c000      4K rw---  /usr/lib/libXdamage.so.1.1.0
b647d000      4K rw---    [ anon ]
b647e000      8K r-x--  /usr/lib/libXcomposite.so.1.0.0
b6480000      4K rw---  /usr/lib/libXcomposite.so.1.0.0
b6481000     48K r-x--  /usr/lib/libgomp.so.1.0.0
b648d000      4K rw---  /usr/lib/libgomp.so.1.0.0
b648e000   1280K r-x--  /lib/i686/cmov/libc-2.11.2.so
b65ce000      8K r----  /lib/i686/cmov/libc-2.11.2.so
b65d0000      4K rw---  /lib/i686/cmov/libc-2.11.2.so
b65d1000     12K rw---    [ anon ]
b65d4000    592K r-x--  /usr/lib/libgnutls.so.26.14.12
b6668000     16K rw---  /usr/lib/libgnutls.so.26.14.12
b666c000    112K r-x--  /usr/lib/libm17n-core.so.0.4.0
b6688000      4K rw---  /usr/lib/libm17n-core.so.0.4.0
b6689000     36K rw---    [ anon ]
b6692000     36K r-x--  /usr/lib/libm17n-flt.so.0.4.0
b669b000      4K rw---  /usr/lib/libm17n-flt.so.0.4.0
b669c000     76K r-x--  /usr/lib/libotf.so.0.0.0
b66af000      4K rw---  /usr/lib/libotf.so.0.0.0
b66b0000    192K r-x--  /usr/lib/libgconf-2.so.4.1.5
b66e0000     12K rw---  /usr/lib/libgconf-2.so.4.1.5
b66e3000    220K r-x--  /lib/libncurses.so.5.7
b671a000     12K rw---  /lib/libncurses.so.5.7
b671d000     20K r-x--  /usr/lib/libgpm.so.2.0.0
b6722000      4K rw---  /usr/lib/libgpm.so.2.0.0
b6723000   1168K r-x--  /usr/lib/libxml2.so.2.7.8
b6847000     20K rw---  /usr/lib/libxml2.so.2.7.8
b684c000      8K rw---    [ anon ]
b684e000    224K r-x--  /lib/libdbus-1.so.3.4.0
b6886000      4K r----  /lib/libdbus-1.so.3.4.0
b6887000      4K rw---  /lib/libdbus-1.so.3.4.0
b6888000   1912K r-x--  /usr/lib/libMagickCore.so.3.0.0
b6a66000    320K rw---  /usr/lib/libMagickCore.so.3.0.0
b6ab6000     96K rw---    [ anon ]
b6ace000   1088K r-x--  /usr/lib/libMagickWand.so.3.0.0
b6bde000      8K rw---  /usr/lib/libMagickWand.so.3.0.0
b6be0000    200K r-x--  /usr/lib/librsvg-2.so.2.26.3
b6c12000      4K rw---  /usr/lib/librsvg-2.so.2.26.3
b6c13000    784K r-x--  /usr/lib/libasound.so.2.0.0
b6cd7000     16K rw---  /usr/lib/libasound.so.2.0.0
b6cdb000      4K rw---    [ anon ]
b6cdc000     72K r-x--  /usr/lib/libXft.so.2.1.13
b6cee000      4K rw---  /usr/lib/libXft.so.2.1.13
b6cef000     32K r-x--  /usr/lib/libXrender.so.1.3.0
b6cf7000      4K rw---  /usr/lib/libXrender.so.1.3.0
b6cf8000   1124K r-x--  /usr/lib/libX11.so.6.3.0
b6e11000     16K rw---  /usr/lib/libX11.so.6.3.0
b6e15000     60K r-x--  /usr/lib/libXpm.so.4.11.0
b6e24000      4K rw---  /usr/lib/libXpm.so.4.11.0
b6e25000     28K r-x--  /usr/lib/libgif.so.4.1.6
b6e2c000      4K rw---  /usr/lib/libgif.so.4.1.6
b6e2d000     76K r-x--  /usr/lib/libz.so.1.2.3.4
b6e40000      4K rw---  /usr/lib/libz.so.1.2.3.4
b6e41000      4K rw---    [ anon ]
b6e42000    140K r-x--  /lib/libpng12.so.0.44.0
b6e65000      4K rw---  /lib/libpng12.so.0.44.0
b6e66000    124K r-x--  /usr/lib/libjpeg.so.62.0.0
b6e85000      4K rw---  /usr/lib/libjpeg.so.62.0.0
b6e86000    356K r-x--  /usr/lib/libtiff.so.4.3.3
b6edf000      8K rw---  /usr/lib/libtiff.so.4.3.3
b6ee1000     80K r-x--  /usr/lib/libICE.so.6.3.0
b6ef5000      8K rw---  /usr/lib/libICE.so.6.3.0
b6ef7000      4K rw---    [ anon ]
b6ef8000     28K r-x--  /usr/lib/libSM.so.6.0.1
b6eff000      4K rw---  /usr/lib/libSM.so.6.0.1
b6f00000     84K r-x--  /lib/i686/cmov/libpthread-2.11.2.so
b6f15000      4K r----  /lib/i686/cmov/libpthread-2.11.2.so
b6f16000      4K rw---  /lib/i686/cmov/libpthread-2.11.2.so
b6f17000     12K rw---    [ anon ]
b6f1a000    800K r-x--  /lib/libglib-2.0.so.0.2400.2
b6fe2000      4K rw---  /lib/libglib-2.0.so.0.2400.2
b6fe3000     28K r-x--  /lib/i686/cmov/librt-2.11.2.so
b6fea000      4K r----  /lib/i686/cmov/librt-2.11.2.so
b6feb000      4K rw---  /lib/i686/cmov/librt-2.11.2.so
b6fec000     16K r-x--  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff0000      4K rw---  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff1000     12K r-x--  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff4000      4K rw---  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff5000    244K r-x--  /usr/lib/libgobject-2.0.so.0.2400.2
b7032000      4K rw---  /usr/lib/libgobject-2.0.so.0.2400.2
b7033000      4K rw---    [ anon ]
b7034000    180K r-x--  /usr/lib/libfontconfig.so.1.4.4
b7061000      8K rw---  /usr/lib/libfontconfig.so.1.4.4
b7063000    460K r-x--  /usr/lib/libfreetype.so.6.6.0
b70d6000     16K rw---  /usr/lib/libfreetype.so.6.6.0
b70da000    264K r-x--  /usr/lib/libpango-1.0.so.0.2800.3
b711c000      8K rw---  /usr/lib/libpango-1.0.so.0.2800.3
b711e000    616K r-x--  /usr/lib/libgio-2.0.so.0.2400.2
b71b8000      8K rw---  /usr/lib/libgio-2.0.so.0.2400.2
b71ba000    460K r-x--  /usr/lib/libcairo.so.2.10800.10
b722d000      8K rw---  /usr/lib/libcairo.so.2.10800.10
b722f000      4K rw---    [ anon ]
b7230000     40K r-x--  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723a000      4K rw---  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723b000    144K r-x--  /lib/i686/cmov/libm-2.11.2.so
b725f000      4K r----  /lib/i686/cmov/libm-2.11.2.so
b7260000      4K rw---  /lib/i686/cmov/libm-2.11.2.so
b7261000     96K r-x--  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b7279000      4K rw---  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b727a000    148K r-x--  /usr/lib/libpangoft2-1.0.so.0.2800.3
b729f000      4K rw---  /usr/lib/libpangoft2-1.0.so.0.2800.3
b72a0000    104K r-x--  /usr/lib/libatk-1.0.so.0.3009.1
b72ba000      8K rw---  /usr/lib/libatk-1.0.so.0.3009.1
b72bc000      4K rw---    [ anon ]
b72bd000    588K r-x--  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7350000     12K rw---  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7353000   3900K r-x--  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7722000     24K rw---  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7728000      4K rw---    [ anon ]
b7729000     28K r-x--  /usr/lib/libvorbisfile.so.3.3.2
b7730000      4K rw---  /usr/lib/libvorbisfile.so.3.3.2
b7731000     16K r-x--  /usr/lib/libcanberra-gtk.so.0.1.6
b7735000      4K rw---  /usr/lib/libcanberra-gtk.so.0.1.6
b7736000     20K r-x--  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773b000      4K rw---  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773c000     28K r--s-  /usr/lib/gconv/gconv-modules.cache
b7743000      8K rw---    [ anon ]
b7745000      4K r-x--    [ anon ]
b7746000    108K r-x--  /lib/ld-2.11.2.so
b7761000      4K r----  /lib/ld-2.11.2.so
b7762000      4K rw---  /lib/ld-2.11.2.so
bf8fa000    524K rw---    [ stack ]
 total    75368K

c.txt
=====
25704:   emacs -fs
08048000   1924K r-x--  /usr/bin/emacs
08229000   5836K rw---  /usr/bin/emacs
09ff2000  14660K rw---    [ anon ]
a8956000 196240K rw---    [ anon ]
b4942000    652K rw---    [ anon ]
b49e5000     48K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoBd.ttf
b49f1000     56K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
b49ff000     52K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf
b4a0c000    296K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf
b4a57000    228K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Oblique.ttf
b4a90000    352K rw---    [ anon ]
b4ae8000  16400K r----  /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc
b5aec000    620K r----  /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf
b5b87000      8K r-x--  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b89000      4K rw---  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b8a000    384K rw-s-    [ shmid=0x2f0021 ]
b5bea000    316K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
b5c39000      4K r--s- 
/var/cache/fontconfig/c05880de57d1f5e948fdfacc138775d9-le32d4.cache-3
b5c3a000     24K r--s- 
/var/cache/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le32d4.cache-3
b5c40000      8K r--s- 
/var/cache/fontconfig/99e8ed0e538f840c565b6ed5dad60d56-le32d4.cache-3
b5c42000      4K r--s- 
/var/cache/fontconfig/0fafd173547752dce4dee1a69e0b3c95-le32d4.cache-3
b5c43000     12K r--s- 
/var/cache/fontconfig/a46337af8a0b4c9b317ad981ec3bdf87-le32d4.cache-3
b5c46000      8K r--s- 
/var/cache/fontconfig/b5ea634b0fb353b8ea17632d1f9ef766-le32d4.cache-3
b5c48000     16K r--s- 
/var/cache/fontconfig/926e794c3d5e5dffcaf2fa83ef8d36c2-le32d4.cache-3
b5c4c000     12K r--s- 
/var/cache/fontconfig/6eb3985aa4124903f6ff08ba781cd364-le32d4.cache-3
b5c4f000      4K r--s- 
/var/cache/fontconfig/7ee55724f82591cb35c3d9771e9e69ed-le32d4.cache-3
b5c50000     28K r--s- 
/var/cache/fontconfig/6d41288fd70b0be22e8c3a91e032eec0-le32d4.cache-3
b5c57000     12K r--s- 
/var/cache/fontconfig/de156ccd2eddbdc19d37a45b8b2aac9c-le32d4.cache-3
b5c5a000      4K r--s- 
/var/cache/fontconfig/4794a0821666d79190d59a36cb4f44b5-le32d4.cache-3
b5c5b000     44K r--s- 
/var/cache/fontconfig/393be3659170ead87bc7d2aed521dc5c-le32d4.cache-3
b5c66000    136K r--s- 
/var/cache/fontconfig/365b55f210c0a22e9a19e35191240f32-le32d4.cache-3
b5c88000     32K r--s- 
/var/cache/fontconfig/d52a8644073d54c13679302ca1180695-le32d4.cache-3
b5c90000     40K r--s- 
/var/cache/fontconfig/089dead882dea3570ffc31a9898cfb69-le32d4.cache-3
b5c9a000     12K r--s- 
/var/cache/fontconfig/cabbd14511b9e8a55e92af97fb3a0461-le32d4.cache-3
b5c9d000     56K r--s- 
/var/cache/fontconfig/e13b20fdb08344e0e664864cc2ede53d-le32d4.cache-3
b5cab000    168K r-x--  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd5000      4K rw---  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd6000     52K r-x--  /usr/lib/libtdb.so.1.2.1
b5ce3000      4K rw---  /usr/lib/libtdb.so.1.2.1
b5ce4000     20K r-x--  /usr/lib/libogg.so.0.7.0
b5ce9000      4K rw---  /usr/lib/libogg.so.0.7.0
b5cea000    156K r-x--  /usr/lib/libvorbis.so.0.4.4
b5d11000      4K rw---  /usr/lib/libvorbis.so.0.4.4
b5d12000     56K r-x--  /usr/lib/libcanberra.so.0.2.3
b5d20000      4K rw---  /usr/lib/libcanberra.so.0.2.3
b5d29000      4K r-x--  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2a000      4K rw---  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2c000      4K r--s- 
/var/cache/fontconfig/2d5a79be9318de81426c36994d1f7ea0-le32d4.cache-3
b5d2d000     56K r--s- 
/var/cache/fontconfig/865f88548240fee46819705c6468c165-le32d4.cache-3
b5d3b000     32K r-x--  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d43000      4K r----  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d44000      4K rw---  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d45000     76K r-x--  /lib/i686/cmov/libnsl-2.11.2.so
b5d58000      4K r----  /lib/i686/cmov/libnsl-2.11.2.so
b5d59000      4K rw---  /lib/i686/cmov/libnsl-2.11.2.so
b5d5a000      8K rw---    [ anon ]
b5d5c000     24K r-x--  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d62000      4K r----  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d63000      4K rw---  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d64000     40K r-x--  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6e000      4K r----  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6f000      4K rw---  /lib/i686/cmov/libnss_files-2.11.2.so
b5d70000   1600K r----  /usr/lib/locale/locale-archive
b5f00000   2048K r----  /usr/lib/locale/locale-archive
b6100000     16K rw---    [ anon ]
b6104000     12K r-x--  /usr/lib/libgpg-error.so.0.4.0
b6107000      4K rw---  /usr/lib/libgpg-error.so.0.4.0
b6108000     16K r-x--  /usr/lib/libdatrie.so.1.1.0
b610c000      4K rw---  /usr/lib/libdatrie.so.1.1.0
b610d000     16K r-x--  /usr/lib/libXdmcp.so.6.0.0
b6111000      4K rw---  /usr/lib/libXdmcp.so.6.0.0
b6112000      8K r-x--  /usr/lib/libXau.so.6.0.0
b6114000      4K rw---  /usr/lib/libXau.so.6.0.0
b6115000      4K rw---    [ anon ]
b6116000    452K r-x--  /usr/lib/libgcrypt.so.11.5.3
b6187000     12K rw---  /usr/lib/libgcrypt.so.11.5.3
b618a000     60K r-x--  /usr/lib/libtasn1.so.3.1.9
b6199000      4K rw---  /usr/lib/libtasn1.so.3.1.9
b619a000     28K r-x--  /usr/lib/libthai.so.0.1.6
b61a1000      4K rw---  /usr/lib/libthai.so.0.1.6
b61a2000    120K r-x--  /usr/lib/libdbus-glib-1.so.2.1.0
b61c0000      4K rw---  /usr/lib/libdbus-glib-1.so.2.1.0
b61c1000    296K r-x--  /usr/lib/libORBit-2.so.0.1.0
b620b000     36K rw---  /usr/lib/libORBit-2.so.0.1.0
b6214000      8K rw---    [ anon ]
b6216000     28K r-x--  /usr/lib/libltdl.so.7.2.1
b621d000      4K rw---  /usr/lib/libltdl.so.7.2.1
b621e000     64K r-x--  /lib/libbz2.so.1.0.4
b622e000      4K rw---  /lib/libbz2.so.1.0.4
b622f000    312K r-x--  /usr/lib/libXt.so.6.0.0
b627d000     16K rw---  /usr/lib/libXt.so.6.0.0
b6281000     64K r-x--  /usr/lib/liblqr-1.so.0.3.1
b6291000      4K rw---  /usr/lib/liblqr-1.so.0.3.1
b6292000    192K r-x--  /usr/lib/liblcms.so.1.0.18
b62c2000      8K rw---  /usr/lib/liblcms.so.1.0.18
b62c4000     12K rw---    [ anon ]
b62c7000    204K r-x--  /usr/lib/libcroco-0.6.so.3.0.1
b62fa000     12K rw---  /usr/lib/libcroco-0.6.so.3.0.1
b62fd000    212K r-x--  /usr/lib/libgsf-1.so.114.0.18
b6332000     12K rw---  /usr/lib/libgsf-1.so.114.0.18
b6335000      4K rw---    [ anon ]
b6336000     12K r-x--  /lib/libuuid.so.1.3.0
b6339000      4K rw---  /lib/libuuid.so.1.3.0
b633a000    144K r-x--  /usr/lib/libexpat.so.1.5.2
b635e000      8K rw---  /usr/lib/libexpat.so.1.5.2
b6360000      4K rw---    [ anon ]
b6361000    100K r-x--  /lib/libselinux.so.1
b637a000      4K r----  /lib/libselinux.so.1
b637b000      4K rw---  /lib/libselinux.so.1
b637c000     64K r-x--  /lib/i686/cmov/libresolv-2.11.2.so
b638c000      4K r----  /lib/i686/cmov/libresolv-2.11.2.so
b638d000      4K rw---  /lib/i686/cmov/libresolv-2.11.2.so
b638e000      8K rw---    [ anon ]
b6390000    200K r-x--  /lib/libpcre.so.3.12.1
b63c2000      4K rw---  /lib/libpcre.so.3.12.1
b63c3000      8K r-x--  /lib/i686/cmov/libdl-2.11.2.so
b63c5000      4K r----  /lib/i686/cmov/libdl-2.11.2.so
b63c6000      4K rw---  /lib/i686/cmov/libdl-2.11.2.so
b63c7000     96K r-x--  /usr/lib/libxcb.so.1.1.0
b63df000      4K rw---  /usr/lib/libxcb.so.1.1.0
b63e0000      4K rw---    [ anon ]
b63e1000     24K r-x--  /usr/lib/libxcb-render.so.0.0.0
b63e7000      4K rw---  /usr/lib/libxcb-render.so.0.0.0
b63e8000     12K r-x--  /usr/lib/libxcb-render-util.so.0.0.0
b63eb000      4K rw---  /usr/lib/libxcb-render-util.so.0.0.0
b63ec000    348K r-x--  /usr/lib/libpixman-1.so.0.16.4
b6443000      8K rw---  /usr/lib/libpixman-1.so.0.16.4
b6445000     32K r-x--  /usr/lib/libXcursor.so.1.0.2
b644d000      4K rw---  /usr/lib/libXcursor.so.1.0.2
b644e000     24K r-x--  /usr/lib/libXrandr.so.2.2.0
b6454000      4K rw---  /usr/lib/libXrandr.so.2.2.0
b6455000      4K rw---    [ anon ]
b6456000     48K r-x--  /usr/lib/libXi.so.6.1.0
b6462000      4K rw---  /usr/lib/libXi.so.6.1.0
b6463000      8K r-x--  /usr/lib/libXinerama.so.1.0.0
b6465000      4K rw---  /usr/lib/libXinerama.so.1.0.0
b6466000     56K r-x--  /usr/lib/libXext.so.6.4.0
b6474000      4K rw---  /usr/lib/libXext.so.6.4.0
b6475000     16K r-x--  /usr/lib/libXfixes.so.3.1.0
b6479000      4K rw---  /usr/lib/libXfixes.so.3.1.0
b647a000      8K r-x--  /usr/lib/libXdamage.so.1.1.0
b647c000      4K rw---  /usr/lib/libXdamage.so.1.1.0
b647d000      4K rw---    [ anon ]
b647e000      8K r-x--  /usr/lib/libXcomposite.so.1.0.0
b6480000      4K rw---  /usr/lib/libXcomposite.so.1.0.0
b6481000     48K r-x--  /usr/lib/libgomp.so.1.0.0
b648d000      4K rw---  /usr/lib/libgomp.so.1.0.0
b648e000   1280K r-x--  /lib/i686/cmov/libc-2.11.2.so
b65ce000      8K r----  /lib/i686/cmov/libc-2.11.2.so
b65d0000      4K rw---  /lib/i686/cmov/libc-2.11.2.so
b65d1000     12K rw---    [ anon ]
b65d4000    592K r-x--  /usr/lib/libgnutls.so.26.14.12
b6668000     16K rw---  /usr/lib/libgnutls.so.26.14.12
b666c000    112K r-x--  /usr/lib/libm17n-core.so.0.4.0
b6688000      4K rw---  /usr/lib/libm17n-core.so.0.4.0
b6689000     36K rw---    [ anon ]
b6692000     36K r-x--  /usr/lib/libm17n-flt.so.0.4.0
b669b000      4K rw---  /usr/lib/libm17n-flt.so.0.4.0
b669c000     76K r-x--  /usr/lib/libotf.so.0.0.0
b66af000      4K rw---  /usr/lib/libotf.so.0.0.0
b66b0000    192K r-x--  /usr/lib/libgconf-2.so.4.1.5
b66e0000     12K rw---  /usr/lib/libgconf-2.so.4.1.5
b66e3000    220K r-x--  /lib/libncurses.so.5.7
b671a000     12K rw---  /lib/libncurses.so.5.7
b671d000     20K r-x--  /usr/lib/libgpm.so.2.0.0
b6722000      4K rw---  /usr/lib/libgpm.so.2.0.0
b6723000   1168K r-x--  /usr/lib/libxml2.so.2.7.8
b6847000     20K rw---  /usr/lib/libxml2.so.2.7.8
b684c000      8K rw---    [ anon ]
b684e000    224K r-x--  /lib/libdbus-1.so.3.4.0
b6886000      4K r----  /lib/libdbus-1.so.3.4.0
b6887000      4K rw---  /lib/libdbus-1.so.3.4.0
b6888000   1912K r-x--  /usr/lib/libMagickCore.so.3.0.0
b6a66000    320K rw---  /usr/lib/libMagickCore.so.3.0.0
b6ab6000     96K rw---    [ anon ]
b6ace000   1088K r-x--  /usr/lib/libMagickWand.so.3.0.0
b6bde000      8K rw---  /usr/lib/libMagickWand.so.3.0.0
b6be0000    200K r-x--  /usr/lib/librsvg-2.so.2.26.3
b6c12000      4K rw---  /usr/lib/librsvg-2.so.2.26.3
b6c13000    784K r-x--  /usr/lib/libasound.so.2.0.0
b6cd7000     16K rw---  /usr/lib/libasound.so.2.0.0
b6cdb000      4K rw---    [ anon ]
b6cdc000     72K r-x--  /usr/lib/libXft.so.2.1.13
b6cee000      4K rw---  /usr/lib/libXft.so.2.1.13
b6cef000     32K r-x--  /usr/lib/libXrender.so.1.3.0
b6cf7000      4K rw---  /usr/lib/libXrender.so.1.3.0
b6cf8000   1124K r-x--  /usr/lib/libX11.so.6.3.0
b6e11000     16K rw---  /usr/lib/libX11.so.6.3.0
b6e15000     60K r-x--  /usr/lib/libXpm.so.4.11.0
b6e24000      4K rw---  /usr/lib/libXpm.so.4.11.0
b6e25000     28K r-x--  /usr/lib/libgif.so.4.1.6
b6e2c000      4K rw---  /usr/lib/libgif.so.4.1.6
b6e2d000     76K r-x--  /usr/lib/libz.so.1.2.3.4
b6e40000      4K rw---  /usr/lib/libz.so.1.2.3.4
b6e41000      4K rw---    [ anon ]
b6e42000    140K r-x--  /lib/libpng12.so.0.44.0
b6e65000      4K rw---  /lib/libpng12.so.0.44.0
b6e66000    124K r-x--  /usr/lib/libjpeg.so.62.0.0
b6e85000      4K rw---  /usr/lib/libjpeg.so.62.0.0
b6e86000    356K r-x--  /usr/lib/libtiff.so.4.3.3
b6edf000      8K rw---  /usr/lib/libtiff.so.4.3.3
b6ee1000     80K r-x--  /usr/lib/libICE.so.6.3.0
b6ef5000      8K rw---  /usr/lib/libICE.so.6.3.0
b6ef7000      4K rw---    [ anon ]
b6ef8000     28K r-x--  /usr/lib/libSM.so.6.0.1
b6eff000      4K rw---  /usr/lib/libSM.so.6.0.1
b6f00000     84K r-x--  /lib/i686/cmov/libpthread-2.11.2.so
b6f15000      4K r----  /lib/i686/cmov/libpthread-2.11.2.so
b6f16000      4K rw---  /lib/i686/cmov/libpthread-2.11.2.so
b6f17000     12K rw---    [ anon ]
b6f1a000    800K r-x--  /lib/libglib-2.0.so.0.2400.2
b6fe2000      4K rw---  /lib/libglib-2.0.so.0.2400.2
b6fe3000     28K r-x--  /lib/i686/cmov/librt-2.11.2.so
b6fea000      4K r----  /lib/i686/cmov/librt-2.11.2.so
b6feb000      4K rw---  /lib/i686/cmov/librt-2.11.2.so
b6fec000     16K r-x--  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff0000      4K rw---  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff1000     12K r-x--  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff4000      4K rw---  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff5000    244K r-x--  /usr/lib/libgobject-2.0.so.0.2400.2
b7032000      4K rw---  /usr/lib/libgobject-2.0.so.0.2400.2
b7033000      4K rw---    [ anon ]
b7034000    180K r-x--  /usr/lib/libfontconfig.so.1.4.4
b7061000      8K rw---  /usr/lib/libfontconfig.so.1.4.4
b7063000    460K r-x--  /usr/lib/libfreetype.so.6.6.0
b70d6000     16K rw---  /usr/lib/libfreetype.so.6.6.0
b70da000    264K r-x--  /usr/lib/libpango-1.0.so.0.2800.3
b711c000      8K rw---  /usr/lib/libpango-1.0.so.0.2800.3
b711e000    616K r-x--  /usr/lib/libgio-2.0.so.0.2400.2
b71b8000      8K rw---  /usr/lib/libgio-2.0.so.0.2400.2
b71ba000    460K r-x--  /usr/lib/libcairo.so.2.10800.10
b722d000      8K rw---  /usr/lib/libcairo.so.2.10800.10
b722f000      4K rw---    [ anon ]
b7230000     40K r-x--  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723a000      4K rw---  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723b000    144K r-x--  /lib/i686/cmov/libm-2.11.2.so
b725f000      4K r----  /lib/i686/cmov/libm-2.11.2.so
b7260000      4K rw---  /lib/i686/cmov/libm-2.11.2.so
b7261000     96K r-x--  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b7279000      4K rw---  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b727a000    148K r-x--  /usr/lib/libpangoft2-1.0.so.0.2800.3
b729f000      4K rw---  /usr/lib/libpangoft2-1.0.so.0.2800.3
b72a0000    104K r-x--  /usr/lib/libatk-1.0.so.0.3009.1
b72ba000      8K rw---  /usr/lib/libatk-1.0.so.0.3009.1
b72bc000      4K rw---    [ anon ]
b72bd000    588K r-x--  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7350000     12K rw---  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7353000   3900K r-x--  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7722000     24K rw---  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7728000      4K rw---    [ anon ]
b7729000     28K r-x--  /usr/lib/libvorbisfile.so.3.3.2
b7730000      4K rw---  /usr/lib/libvorbisfile.so.3.3.2
b7731000     16K r-x--  /usr/lib/libcanberra-gtk.so.0.1.6
b7735000      4K rw---  /usr/lib/libcanberra-gtk.so.0.1.6
b7736000     20K r-x--  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773b000      4K rw---  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773c000     28K r--s-  /usr/lib/gconv/gconv-modules.cache
b7743000      8K rw---    [ anon ]
b7745000      4K r-x--    [ anon ]
b7746000    108K r-x--  /lib/ld-2.11.2.so
b7761000      4K r----  /lib/ld-2.11.2.so
b7762000      4K rw---  /lib/ld-2.11.2.so
bf8fa000    524K rw---    [ stack ]
 total   266380K

d.txt
=====
25704:   emacs -fs
08048000   1924K r-x--  /usr/bin/emacs
08229000   5836K rw---  /usr/bin/emacs
09ff2000  14660K rw---    [ anon ]
a8956000 196240K rw---    [ anon ]
b49e5000     48K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoBd.ttf
b49f1000     56K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
b49ff000     52K r---- 
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf
b4a0c000    296K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Bold.ttf
b4a57000    228K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono-Oblique.ttf
b4a90000    352K rw---    [ anon ]
b4ae8000  16400K r----  /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc
b5aec000    620K r----  /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf
b5b87000      8K r-x--  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b89000      4K rw---  /usr/lib/pango/1.6.0/modules/pango-basic-fc.so
b5b8a000    384K rw-s-    [ shmid=0x2f0021 ]
b5bea000    316K r---- 
/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
b5c39000      4K r--s- 
/var/cache/fontconfig/c05880de57d1f5e948fdfacc138775d9-le32d4.cache-3
b5c3a000     24K r--s- 
/var/cache/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le32d4.cache-3
b5c40000      8K r--s- 
/var/cache/fontconfig/99e8ed0e538f840c565b6ed5dad60d56-le32d4.cache-3
b5c42000      4K r--s- 
/var/cache/fontconfig/0fafd173547752dce4dee1a69e0b3c95-le32d4.cache-3
b5c43000     12K r--s- 
/var/cache/fontconfig/a46337af8a0b4c9b317ad981ec3bdf87-le32d4.cache-3
b5c46000      8K r--s- 
/var/cache/fontconfig/b5ea634b0fb353b8ea17632d1f9ef766-le32d4.cache-3
b5c48000     16K r--s- 
/var/cache/fontconfig/926e794c3d5e5dffcaf2fa83ef8d36c2-le32d4.cache-3
b5c4c000     12K r--s- 
/var/cache/fontconfig/6eb3985aa4124903f6ff08ba781cd364-le32d4.cache-3
b5c4f000      4K r--s- 
/var/cache/fontconfig/7ee55724f82591cb35c3d9771e9e69ed-le32d4.cache-3
b5c50000     28K r--s- 
/var/cache/fontconfig/6d41288fd70b0be22e8c3a91e032eec0-le32d4.cache-3
b5c57000     12K r--s- 
/var/cache/fontconfig/de156ccd2eddbdc19d37a45b8b2aac9c-le32d4.cache-3
b5c5a000      4K r--s- 
/var/cache/fontconfig/4794a0821666d79190d59a36cb4f44b5-le32d4.cache-3
b5c5b000     44K r--s- 
/var/cache/fontconfig/393be3659170ead87bc7d2aed521dc5c-le32d4.cache-3
b5c66000    136K r--s- 
/var/cache/fontconfig/365b55f210c0a22e9a19e35191240f32-le32d4.cache-3
b5c88000     32K r--s- 
/var/cache/fontconfig/d52a8644073d54c13679302ca1180695-le32d4.cache-3
b5c90000     40K r--s- 
/var/cache/fontconfig/089dead882dea3570ffc31a9898cfb69-le32d4.cache-3
b5c9a000     12K r--s- 
/var/cache/fontconfig/cabbd14511b9e8a55e92af97fb3a0461-le32d4.cache-3
b5c9d000     56K r--s- 
/var/cache/fontconfig/e13b20fdb08344e0e664864cc2ede53d-le32d4.cache-3
b5cab000    168K r-x--  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd5000      4K rw---  /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so
b5cd6000     52K r-x--  /usr/lib/libtdb.so.1.2.1
b5ce3000      4K rw---  /usr/lib/libtdb.so.1.2.1
b5ce4000     20K r-x--  /usr/lib/libogg.so.0.7.0
b5ce9000      4K rw---  /usr/lib/libogg.so.0.7.0
b5cea000    156K r-x--  /usr/lib/libvorbis.so.0.4.4
b5d11000      4K rw---  /usr/lib/libvorbis.so.0.4.4
b5d12000     56K r-x--  /usr/lib/libcanberra.so.0.2.3
b5d20000      4K rw---  /usr/lib/libcanberra.so.0.2.3
b5d29000      4K r-x--  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2a000      4K rw---  /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5d2c000      4K r--s- 
/var/cache/fontconfig/2d5a79be9318de81426c36994d1f7ea0-le32d4.cache-3
b5d2d000     56K r--s- 
/var/cache/fontconfig/865f88548240fee46819705c6468c165-le32d4.cache-3
b5d3b000     32K r-x--  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d43000      4K r----  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d44000      4K rw---  /lib/i686/cmov/libnss_nis-2.11.2.so
b5d45000     76K r-x--  /lib/i686/cmov/libnsl-2.11.2.so
b5d58000      4K r----  /lib/i686/cmov/libnsl-2.11.2.so
b5d59000      4K rw---  /lib/i686/cmov/libnsl-2.11.2.so
b5d5a000      8K rw---    [ anon ]
b5d5c000     24K r-x--  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d62000      4K r----  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d63000      4K rw---  /lib/i686/cmov/libnss_compat-2.11.2.so
b5d64000     40K r-x--  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6e000      4K r----  /lib/i686/cmov/libnss_files-2.11.2.so
b5d6f000      4K rw---  /lib/i686/cmov/libnss_files-2.11.2.so
b5d70000   1600K r----  /usr/lib/locale/locale-archive
b5f00000   2048K r----  /usr/lib/locale/locale-archive
b6100000     16K rw---    [ anon ]
b6104000     12K r-x--  /usr/lib/libgpg-error.so.0.4.0
b6107000      4K rw---  /usr/lib/libgpg-error.so.0.4.0
b6108000     16K r-x--  /usr/lib/libdatrie.so.1.1.0
b610c000      4K rw---  /usr/lib/libdatrie.so.1.1.0
b610d000     16K r-x--  /usr/lib/libXdmcp.so.6.0.0
b6111000      4K rw---  /usr/lib/libXdmcp.so.6.0.0
b6112000      8K r-x--  /usr/lib/libXau.so.6.0.0
b6114000      4K rw---  /usr/lib/libXau.so.6.0.0
b6115000      4K rw---    [ anon ]
b6116000    452K r-x--  /usr/lib/libgcrypt.so.11.5.3
b6187000     12K rw---  /usr/lib/libgcrypt.so.11.5.3
b618a000     60K r-x--  /usr/lib/libtasn1.so.3.1.9
b6199000      4K rw---  /usr/lib/libtasn1.so.3.1.9
b619a000     28K r-x--  /usr/lib/libthai.so.0.1.6
b61a1000      4K rw---  /usr/lib/libthai.so.0.1.6
b61a2000    120K r-x--  /usr/lib/libdbus-glib-1.so.2.1.0
b61c0000      4K rw---  /usr/lib/libdbus-glib-1.so.2.1.0
b61c1000    296K r-x--  /usr/lib/libORBit-2.so.0.1.0
b620b000     36K rw---  /usr/lib/libORBit-2.so.0.1.0
b6214000      8K rw---    [ anon ]
b6216000     28K r-x--  /usr/lib/libltdl.so.7.2.1
b621d000      4K rw---  /usr/lib/libltdl.so.7.2.1
b621e000     64K r-x--  /lib/libbz2.so.1.0.4
b622e000      4K rw---  /lib/libbz2.so.1.0.4
b622f000    312K r-x--  /usr/lib/libXt.so.6.0.0
b627d000     16K rw---  /usr/lib/libXt.so.6.0.0
b6281000     64K r-x--  /usr/lib/liblqr-1.so.0.3.1
b6291000      4K rw---  /usr/lib/liblqr-1.so.0.3.1
b6292000    192K r-x--  /usr/lib/liblcms.so.1.0.18
b62c2000      8K rw---  /usr/lib/liblcms.so.1.0.18
b62c4000     12K rw---    [ anon ]
b62c7000    204K r-x--  /usr/lib/libcroco-0.6.so.3.0.1
b62fa000     12K rw---  /usr/lib/libcroco-0.6.so.3.0.1
b62fd000    212K r-x--  /usr/lib/libgsf-1.so.114.0.18
b6332000     12K rw---  /usr/lib/libgsf-1.so.114.0.18
b6335000      4K rw---    [ anon ]
b6336000     12K r-x--  /lib/libuuid.so.1.3.0
b6339000      4K rw---  /lib/libuuid.so.1.3.0
b633a000    144K r-x--  /usr/lib/libexpat.so.1.5.2
b635e000      8K rw---  /usr/lib/libexpat.so.1.5.2
b6360000      4K rw---    [ anon ]
b6361000    100K r-x--  /lib/libselinux.so.1
b637a000      4K r----  /lib/libselinux.so.1
b637b000      4K rw---  /lib/libselinux.so.1
b637c000     64K r-x--  /lib/i686/cmov/libresolv-2.11.2.so
b638c000      4K r----  /lib/i686/cmov/libresolv-2.11.2.so
b638d000      4K rw---  /lib/i686/cmov/libresolv-2.11.2.so
b638e000      8K rw---    [ anon ]
b6390000    200K r-x--  /lib/libpcre.so.3.12.1
b63c2000      4K rw---  /lib/libpcre.so.3.12.1
b63c3000      8K r-x--  /lib/i686/cmov/libdl-2.11.2.so
b63c5000      4K r----  /lib/i686/cmov/libdl-2.11.2.so
b63c6000      4K rw---  /lib/i686/cmov/libdl-2.11.2.so
b63c7000     96K r-x--  /usr/lib/libxcb.so.1.1.0
b63df000      4K rw---  /usr/lib/libxcb.so.1.1.0
b63e0000      4K rw---    [ anon ]
b63e1000     24K r-x--  /usr/lib/libxcb-render.so.0.0.0
b63e7000      4K rw---  /usr/lib/libxcb-render.so.0.0.0
b63e8000     12K r-x--  /usr/lib/libxcb-render-util.so.0.0.0
b63eb000      4K rw---  /usr/lib/libxcb-render-util.so.0.0.0
b63ec000    348K r-x--  /usr/lib/libpixman-1.so.0.16.4
b6443000      8K rw---  /usr/lib/libpixman-1.so.0.16.4
b6445000     32K r-x--  /usr/lib/libXcursor.so.1.0.2
b644d000      4K rw---  /usr/lib/libXcursor.so.1.0.2
b644e000     24K r-x--  /usr/lib/libXrandr.so.2.2.0
b6454000      4K rw---  /usr/lib/libXrandr.so.2.2.0
b6455000      4K rw---    [ anon ]
b6456000     48K r-x--  /usr/lib/libXi.so.6.1.0
b6462000      4K rw---  /usr/lib/libXi.so.6.1.0
b6463000      8K r-x--  /usr/lib/libXinerama.so.1.0.0
b6465000      4K rw---  /usr/lib/libXinerama.so.1.0.0
b6466000     56K r-x--  /usr/lib/libXext.so.6.4.0
b6474000      4K rw---  /usr/lib/libXext.so.6.4.0
b6475000     16K r-x--  /usr/lib/libXfixes.so.3.1.0
b6479000      4K rw---  /usr/lib/libXfixes.so.3.1.0
b647a000      8K r-x--  /usr/lib/libXdamage.so.1.1.0
b647c000      4K rw---  /usr/lib/libXdamage.so.1.1.0
b647d000      4K rw---    [ anon ]
b647e000      8K r-x--  /usr/lib/libXcomposite.so.1.0.0
b6480000      4K rw---  /usr/lib/libXcomposite.so.1.0.0
b6481000     48K r-x--  /usr/lib/libgomp.so.1.0.0
b648d000      4K rw---  /usr/lib/libgomp.so.1.0.0
b648e000   1280K r-x--  /lib/i686/cmov/libc-2.11.2.so
b65ce000      8K r----  /lib/i686/cmov/libc-2.11.2.so
b65d0000      4K rw---  /lib/i686/cmov/libc-2.11.2.so
b65d1000     12K rw---    [ anon ]
b65d4000    592K r-x--  /usr/lib/libgnutls.so.26.14.12
b6668000     16K rw---  /usr/lib/libgnutls.so.26.14.12
b666c000    112K r-x--  /usr/lib/libm17n-core.so.0.4.0
b6688000      4K rw---  /usr/lib/libm17n-core.so.0.4.0
b6689000     36K rw---    [ anon ]
b6692000     36K r-x--  /usr/lib/libm17n-flt.so.0.4.0
b669b000      4K rw---  /usr/lib/libm17n-flt.so.0.4.0
b669c000     76K r-x--  /usr/lib/libotf.so.0.0.0
b66af000      4K rw---  /usr/lib/libotf.so.0.0.0
b66b0000    192K r-x--  /usr/lib/libgconf-2.so.4.1.5
b66e0000     12K rw---  /usr/lib/libgconf-2.so.4.1.5
b66e3000    220K r-x--  /lib/libncurses.so.5.7
b671a000     12K rw---  /lib/libncurses.so.5.7
b671d000     20K r-x--  /usr/lib/libgpm.so.2.0.0
b6722000      4K rw---  /usr/lib/libgpm.so.2.0.0
b6723000   1168K r-x--  /usr/lib/libxml2.so.2.7.8
b6847000     20K rw---  /usr/lib/libxml2.so.2.7.8
b684c000      8K rw---    [ anon ]
b684e000    224K r-x--  /lib/libdbus-1.so.3.4.0
b6886000      4K r----  /lib/libdbus-1.so.3.4.0
b6887000      4K rw---  /lib/libdbus-1.so.3.4.0
b6888000   1912K r-x--  /usr/lib/libMagickCore.so.3.0.0
b6a66000    320K rw---  /usr/lib/libMagickCore.so.3.0.0
b6ab6000     96K rw---    [ anon ]
b6ace000   1088K r-x--  /usr/lib/libMagickWand.so.3.0.0
b6bde000      8K rw---  /usr/lib/libMagickWand.so.3.0.0
b6be0000    200K r-x--  /usr/lib/librsvg-2.so.2.26.3
b6c12000      4K rw---  /usr/lib/librsvg-2.so.2.26.3
b6c13000    784K r-x--  /usr/lib/libasound.so.2.0.0
b6cd7000     16K rw---  /usr/lib/libasound.so.2.0.0
b6cdb000      4K rw---    [ anon ]
b6cdc000     72K r-x--  /usr/lib/libXft.so.2.1.13
b6cee000      4K rw---  /usr/lib/libXft.so.2.1.13
b6cef000     32K r-x--  /usr/lib/libXrender.so.1.3.0
b6cf7000      4K rw---  /usr/lib/libXrender.so.1.3.0
b6cf8000   1124K r-x--  /usr/lib/libX11.so.6.3.0
b6e11000     16K rw---  /usr/lib/libX11.so.6.3.0
b6e15000     60K r-x--  /usr/lib/libXpm.so.4.11.0
b6e24000      4K rw---  /usr/lib/libXpm.so.4.11.0
b6e25000     28K r-x--  /usr/lib/libgif.so.4.1.6
b6e2c000      4K rw---  /usr/lib/libgif.so.4.1.6
b6e2d000     76K r-x--  /usr/lib/libz.so.1.2.3.4
b6e40000      4K rw---  /usr/lib/libz.so.1.2.3.4
b6e41000      4K rw---    [ anon ]
b6e42000    140K r-x--  /lib/libpng12.so.0.44.0
b6e65000      4K rw---  /lib/libpng12.so.0.44.0
b6e66000    124K r-x--  /usr/lib/libjpeg.so.62.0.0
b6e85000      4K rw---  /usr/lib/libjpeg.so.62.0.0
b6e86000    356K r-x--  /usr/lib/libtiff.so.4.3.3
b6edf000      8K rw---  /usr/lib/libtiff.so.4.3.3
b6ee1000     80K r-x--  /usr/lib/libICE.so.6.3.0
b6ef5000      8K rw---  /usr/lib/libICE.so.6.3.0
b6ef7000      4K rw---    [ anon ]
b6ef8000     28K r-x--  /usr/lib/libSM.so.6.0.1
b6eff000      4K rw---  /usr/lib/libSM.so.6.0.1
b6f00000     84K r-x--  /lib/i686/cmov/libpthread-2.11.2.so
b6f15000      4K r----  /lib/i686/cmov/libpthread-2.11.2.so
b6f16000      4K rw---  /lib/i686/cmov/libpthread-2.11.2.so
b6f17000     12K rw---    [ anon ]
b6f1a000    800K r-x--  /lib/libglib-2.0.so.0.2400.2
b6fe2000      4K rw---  /lib/libglib-2.0.so.0.2400.2
b6fe3000     28K r-x--  /lib/i686/cmov/librt-2.11.2.so
b6fea000      4K r----  /lib/i686/cmov/librt-2.11.2.so
b6feb000      4K rw---  /lib/i686/cmov/librt-2.11.2.so
b6fec000     16K r-x--  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff0000      4K rw---  /usr/lib/libgthread-2.0.so.0.2400.2
b6ff1000     12K r-x--  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff4000      4K rw---  /usr/lib/libgmodule-2.0.so.0.2400.2
b6ff5000    244K r-x--  /usr/lib/libgobject-2.0.so.0.2400.2
b7032000      4K rw---  /usr/lib/libgobject-2.0.so.0.2400.2
b7033000      4K rw---    [ anon ]
b7034000    180K r-x--  /usr/lib/libfontconfig.so.1.4.4
b7061000      8K rw---  /usr/lib/libfontconfig.so.1.4.4
b7063000    460K r-x--  /usr/lib/libfreetype.so.6.6.0
b70d6000     16K rw---  /usr/lib/libfreetype.so.6.6.0
b70da000    264K r-x--  /usr/lib/libpango-1.0.so.0.2800.3
b711c000      8K rw---  /usr/lib/libpango-1.0.so.0.2800.3
b711e000    616K r-x--  /usr/lib/libgio-2.0.so.0.2400.2
b71b8000      8K rw---  /usr/lib/libgio-2.0.so.0.2400.2
b71ba000    460K r-x--  /usr/lib/libcairo.so.2.10800.10
b722d000      8K rw---  /usr/lib/libcairo.so.2.10800.10
b722f000      4K rw---    [ anon ]
b7230000     40K r-x--  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723a000      4K rw---  /usr/lib/libpangocairo-1.0.so.0.2800.3
b723b000    144K r-x--  /lib/i686/cmov/libm-2.11.2.so
b725f000      4K r----  /lib/i686/cmov/libm-2.11.2.so
b7260000      4K rw---  /lib/i686/cmov/libm-2.11.2.so
b7261000     96K r-x--  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b7279000      4K rw---  /usr/lib/libgdk_pixbuf-2.0.so.0.2000.1
b727a000    148K r-x--  /usr/lib/libpangoft2-1.0.so.0.2800.3
b729f000      4K rw---  /usr/lib/libpangoft2-1.0.so.0.2800.3
b72a0000    104K r-x--  /usr/lib/libatk-1.0.so.0.3009.1
b72ba000      8K rw---  /usr/lib/libatk-1.0.so.0.3009.1
b72bc000      4K rw---    [ anon ]
b72bd000    588K r-x--  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7350000     12K rw---  /usr/lib/libgdk-x11-2.0.so.0.2000.1
b7353000   3900K r-x--  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7722000     24K rw---  /usr/lib/libgtk-x11-2.0.so.0.2000.1
b7728000      4K rw---    [ anon ]
b7729000     28K r-x--  /usr/lib/libvorbisfile.so.3.3.2
b7730000      4K rw---  /usr/lib/libvorbisfile.so.3.3.2
b7731000     16K r-x--  /usr/lib/libcanberra-gtk.so.0.1.6
b7735000      4K rw---  /usr/lib/libcanberra-gtk.so.0.1.6
b7736000     20K r-x--  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773b000      4K rw---  /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so
b773c000     28K r--s-  /usr/lib/gconv/gconv-modules.cache
b7743000      8K rw---    [ anon ]
b7745000      4K r-x--    [ anon ]
b7746000    108K r-x--  /lib/ld-2.11.2.so
b7761000      4K r----  /lib/ld-2.11.2.so
b7762000      4K rw---  /lib/ld-2.11.2.so
bf8fa000    524K rw---    [ stack ]
 total   265728K

-- 
View this message in context: http://old.nabble.com/Using-the-ImageMagick-backend-seems-to-leak-memory-tp30603180p30642140.html
Sent from the Emacs - Dev mailing list archive at Nabble.com.




^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-10 10:34         ` Tassilo Horn
  2011-01-10 13:28           ` Jashy
@ 2011-01-11 10:59           ` joakim
  1 sibling, 0 replies; 29+ messages in thread
From: joakim @ 2011-01-11 10:59 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: Emacs-devel, Andreas Schwab, Jashy, Miles Bader

Tassilo Horn <tassilo@member.fsf.org> writes:

> Andreas Schwab <schwab@linux-m68k.org> writes:
>
> Hi Andreas,
>
>>> Looking at the API, there's
>>>
>>> ClearMagickWand() clears resources associated with the wand.
>>> The format of the ClearMagickWand method is:
>>>
>>>   void ClearMagickWand(MagickWand *wand)
>>>
>>> A description of each parameter follows:
>>> wand
>>>   the magick wand.
>>>
>>> In the emacs sources, that function's never called.  So that's
>>> probably the source of the leak.
>>
>> DestroyMagickWand should imply ClearMagickWand, IIUC.
>>
>> I've fixed a few resource leaks, but that did not really help.

I just verified that using a dev IM doesnt help.

Maybe using Valgrind can help, but it doesnt work with emacs sadly.

>
> Looking at the code examples at 
>
>   http://www.imagemagick.org/api/magick-wand.php
>
> it seems one must call
>
>   MagickWandTerminus();
>
> after destroying the wands.
>
> Maybe that helps.
>
> Bye,
> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-07  8:28     ` Tassilo Horn
  2011-01-07 22:39       ` Andreas Schwab
@ 2011-01-11 14:17       ` joakim
  2011-01-11 14:38         ` joakim
  2011-01-11 17:43         ` Tassilo Horn
  1 sibling, 2 replies; 29+ messages in thread
From: joakim @ 2011-01-11 14:17 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: Emacs-devel, Jashy, Miles Bader

Tassilo Horn <tassilo@member.fsf.org> writes:

> Miles Bader <miles@gnu.org> writes:
>
>>>> I just noticed that my emacs uses up more than a gigabyte memory.
>>>> It is because of doc-view with ImageMagick backend.
>>>> 
>>> I met same issue.
>>
>> My impression is that in general, ImageMagick does not aim at memory
>> efficiency (that's why I don't want to use its libraries for my own
>> image I/O needs, event though doing so would be pretty convenient).
>
> Well, not being memory efficiency and not giving back memory at all is a
> minor difference. ;-)
>
> I've just opened a doc-view page-x.png with ImageMagick's display tool.
> The behavior is identical, e.g., it reserves ~30MB per PNG and only
> gives back memory when I close the program.  So I presume, ImageMagick
> has some cache that gets at least cleared when the process is killed.
> I'm sure, there's some C function you can call to clear it...
>
> Looking at the API, there's
>
> ClearMagickWand() clears resources associated with the wand.
> The format of the ClearMagickWand method is:
>
>   void ClearMagickWand(MagickWand *wand)
>
> A description of each parameter follows:
> wand
>   the magick wand.
>
> In the emacs sources, that function's never called.  So that's probably
> the source of the leak.

Hmm. We can try.

Anyway i asked the IM team:
http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17819

Some other things:
- Do you see the issue only when scaling?
- Only with PNG? Or also JPG?

> Bye,
> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11 14:17       ` joakim
@ 2011-01-11 14:38         ` joakim
  2011-01-11 17:43         ` Tassilo Horn
  1 sibling, 0 replies; 29+ messages in thread
From: joakim @ 2011-01-11 14:38 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: Miles Bader, Jashy, Emacs-devel

joakim@verona.se writes:

> Tassilo Horn <tassilo@member.fsf.org> writes:

Could you try this patch? Seems to help for me

=== modified file 'src/image.c'
*** src/image.c	2011-01-07 22:33:32 +0000
--- src/image.c	2011-01-11 14:30:55 +0000
***************
*** 7566,7571 ****
--- 7566,7572 ----
        if (im_image != NULL)
  	{
  	  image_wand = NewMagickWandFromImage (im_image);
+           DestroyImage(im_image);
  	  status = MagickTrue;
  	}
        else




>
>> Miles Bader <miles@gnu.org> writes:
>>
>>>>> I just noticed that my emacs uses up more than a gigabyte memory.
>>>>> It is because of doc-view with ImageMagick backend.
>>>>> 
>>>> I met same issue.
>>>
>>> My impression is that in general, ImageMagick does not aim at memory
>>> efficiency (that's why I don't want to use its libraries for my own
>>> image I/O needs, event though doing so would be pretty convenient).
>>
>> Well, not being memory efficiency and not giving back memory at all is a
>> minor difference. ;-)
>>
>> I've just opened a doc-view page-x.png with ImageMagick's display tool.
>> The behavior is identical, e.g., it reserves ~30MB per PNG and only
>> gives back memory when I close the program.  So I presume, ImageMagick
>> has some cache that gets at least cleared when the process is killed.
>> I'm sure, there's some C function you can call to clear it...
>>
>> Looking at the API, there's
>>
>> ClearMagickWand() clears resources associated with the wand.
>> The format of the ClearMagickWand method is:
>>
>>   void ClearMagickWand(MagickWand *wand)
>>
>> A description of each parameter follows:
>> wand
>>   the magick wand.
>>
>> In the emacs sources, that function's never called.  So that's probably
>> the source of the leak.
>
> Hmm. We can try.
>
> Anyway i asked the IM team:
> http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17819
>
> Some other things:
> - Do you see the issue only when scaling?
> - Only with PNG? Or also JPG?
>
>> Bye,
>> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11 14:17       ` joakim
  2011-01-11 14:38         ` joakim
@ 2011-01-11 17:43         ` Tassilo Horn
  2011-01-11 18:11           ` joakim
  1 sibling, 1 reply; 29+ messages in thread
From: Tassilo Horn @ 2011-01-11 17:43 UTC (permalink / raw)
  To: joakim; +Cc: Emacs-devel, Jashy, Miles Bader

joakim@verona.se writes:

>> ClearMagickWand() clears resources associated with the wand.
>> The format of the ClearMagickWand method is:
>>
>>   void ClearMagickWand(MagickWand *wand)
>>
>> A description of each parameter follows:
>> wand
>>   the magick wand.
>>
>> In the emacs sources, that function's never called.  So that's
>> probably the source of the leak.
>
> Hmm. We can try.

Andreas already added DestroyMagickWand() calls that imply clearing, and
I locally added MagickWandTerminus() calls.  Right now, I presume the
leak is not on the IM side.

Your patch in the other mail (I'll try it later) seems to support that
guess.

> Anyway i asked the IM team:
> http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17819
>
> Some other things:
> - Do you see the issue only when scaling?

No, always.

> - Only with PNG? Or also JPG?

I tested with PNG and TIF, and both have the problem.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11 17:43         ` Tassilo Horn
@ 2011-01-11 18:11           ` joakim
  2011-01-11 19:10             ` Tassilo Horn
  0 siblings, 1 reply; 29+ messages in thread
From: joakim @ 2011-01-11 18:11 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: Emacs-devel, Jashy, Miles Bader

Tassilo Horn <tassilo@member.fsf.org> writes:

> joakim@verona.se writes:
>
>>> ClearMagickWand() clears resources associated with the wand.
>>> The format of the ClearMagickWand method is:
>>>
>>>   void ClearMagickWand(MagickWand *wand)
>>>
>>> A description of each parameter follows:
>>> wand
>>>   the magick wand.
>>>
>>> In the emacs sources, that function's never called.  So that's
>>> probably the source of the leak.
>>
>> Hmm. We can try.
>
> Andreas already added DestroyMagickWand() calls that imply clearing, and
> I locally added MagickWandTerminus() calls.  Right now, I presume the
> leak is not on the IM side.
>
> Your patch in the other mail (I'll try it later) seems to support that
> guess.

I've looked at this a little bit further.

The error is that the image read with ReadImage is cloned by
NewMagickWandFromImage not refered as I believed when I wrote the code.

The code was written that way to avoid another memory problem I
experienced with image bundles. If the current strategy remains,
DestroyImage(im_image); should be the right fix.

However, the strategy should probably be changed to avoid the
cloning. This will result in a more complex code path.


>
>> Anyway i asked the IM team:
>> http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=17819>
>> Some other things:
>> - Do you see the issue only when scaling?
>
> No, always.
>
>> - Only with PNG? Or also JPG?
>
> I tested with PNG and TIF, and both have the problem.
>
> Bye,
> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11 18:11           ` joakim
@ 2011-01-11 19:10             ` Tassilo Horn
  2011-01-11 19:35               ` joakim
  2011-01-12  1:47               ` Stefan Monnier
  0 siblings, 2 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-11 19:10 UTC (permalink / raw)
  To: joakim; +Cc: Miles Bader, Jashy, Emacs-devel

joakim@verona.se writes:

Hi Joakim,

> I've looked at this a little bit further.
>
> The error is that the image read with ReadImage is cloned by
> NewMagickWandFromImage not refered as I believed when I wrote the
> code.
>
> The code was written that way to avoid another memory problem I
> experienced with image bundles. If the current strategy remains,
> DestroyImage(im_image); should be the right fix.

I've tested that, and now memory is freed as expected.  Still, when I
used doc-view to view a 30 pages PDF (aka 30 large PNGs), the emacs
process started with ~11 MB when showing the first page and was at 12.2
MB after viewing all pages in sequence, killing the doc-view buffer, and
doing (clear-image-cache) and (garbage-collect).  But that might be no
real leak.

> However, the strategy should probably be changed to avoid the cloning.
> This will result in a more complex code path.

Well, you are the ImageMagick master. ;-)

Anyway, should I commit the following patch which includes your
DestroyImage() call that fixes the issue, and I additionally surrounded
image loading with calls to MagickWandGenesis()/MagickWandTerminus(),
because that's the way the API is used throughout the example codes in
the MagickWand API docs?

--8<---------------cut here---------------start------------->8---
=== modified file 'src/image.c'
--- src/image.c	2011-01-07 22:33:32 +0000
+++ src/image.c	2011-01-11 19:02:33 +0000
@@ -7521,6 +7521,9 @@
      image.  Interface :index is same as for GIF.  First we "ping" the
      image to see how many sub-images it contains. Pinging is faster
      than loading the image to find out things about it.  */
+
+  /* MagickWandGenesis() initializes the imagemagick library.  */
+  MagickWandGenesis ();
   image = image_spec_value (img->spec, QCindex, NULL);
   ino = INTEGERP (image) ? XFASTINT (image) : 0;
   ping_wand = NewMagickWand ();
@@ -7549,6 +7552,7 @@
                     img->data.lisp_val));
 
   DestroyMagickWand (ping_wand);
+
   /* Now, after pinging, we know how many images are inside the
      file. If its not a bundle, just one.  */
 
@@ -7566,6 +7570,7 @@
       if (im_image != NULL)
 	{
 	  image_wand = NewMagickWandFromImage (im_image);
+          DestroyImage(im_image);
 	  status = MagickTrue;
 	}
       else
@@ -7576,7 +7581,7 @@
       image_wand = NewMagickWand ();
       status = MagickReadImageBlob (image_wand, contents, size);
     }
-  image_error ("im read failed", Qnil, Qnil);
+
   if (status == MagickFalse) goto imagemagick_error;
 
   /* If width and/or height is set in the display spec assume we want
@@ -7805,11 +7810,13 @@
 
   /* Final cleanup. image_wand should be the only resource left. */
   DestroyMagickWand (image_wand);
+  MagickWandTerminus ();
 
   return 1;
 
  imagemagick_error:
   DestroyMagickWand (image_wand);
+  MagickWandTerminus ();
   /* TODO more cleanup.  */
   image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec, Qnil);
   return 0;
@@ -8681,8 +8688,6 @@
 #if defined (HAVE_IMAGEMAGICK)
   if (EQ (type, Qimagemagick))
     {
-      /* MagickWandGenesis() initializes the imagemagick library.  */
-      MagickWandGenesis ();
       return CHECK_LIB_AVAILABLE (&imagemagick_type, init_imagemagick_functions,
 				  libraries);
     }

--8<---------------cut here---------------end--------------->8---

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11 19:10             ` Tassilo Horn
@ 2011-01-11 19:35               ` joakim
  2011-01-11 19:55                 ` Tassilo Horn
  2011-01-12  1:47               ` Stefan Monnier
  1 sibling, 1 reply; 29+ messages in thread
From: joakim @ 2011-01-11 19:35 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: Emacs-devel, Jashy, Miles Bader

Tassilo Horn <tassilo@member.fsf.org> writes:

> joakim@verona.se writes:
>
> Hi Joakim,
>
>> I've looked at this a little bit further.
>>
>> The error is that the image read with ReadImage is cloned by
>> NewMagickWandFromImage not refered as I believed when I wrote the
>> code.
>>
>> The code was written that way to avoid another memory problem I
>> experienced with image bundles. If the current strategy remains,
>> DestroyImage(im_image); should be the right fix.
>
> I've tested that, and now memory is freed as expected.  Still, when I
> used doc-view to view a 30 pages PDF (aka 30 large PNGs), the emacs
> process started with ~11 MB when showing the first page and was at 12.2
> MB after viewing all pages in sequence, killing the doc-view buffer, and
> doing (clear-image-cache) and (garbage-collect).  But that might be no
> real leak.
>
>> However, the strategy should probably be changed to avoid the cloning.
>> This will result in a more complex code path.
>
> Well, you are the ImageMagick master. ;-)
>
> Anyway, should I commit the following patch which includes your
> DestroyImage() call that fixes the issue, and I additionally surrounded
> image loading with calls to MagickWandGenesis()/MagickWandTerminus(),
> because that's the way the API is used throughout the example codes in
> the MagickWand API docs?

The patch seems fine. Im not entirely sure about genesis/terminus
though, I interpreted the docs to mean genesis=library load.


>
> === modified file 'src/image.c'
> --- src/image.c	2011-01-07 22:33:32 +0000
> +++ src/image.c	2011-01-11 19:02:33 +0000
> @@ -7521,6 +7521,9 @@
>       image.  Interface :index is same as for GIF.  First we "ping" the
>       image to see how many sub-images it contains. Pinging is faster
>       than loading the image to find out things about it.  */
> +
> +  /* MagickWandGenesis() initializes the imagemagick library.  */
> +  MagickWandGenesis ();
>    image = image_spec_value (img->spec, QCindex, NULL);
>    ino = INTEGERP (image) ? XFASTINT (image) : 0;
>    ping_wand = NewMagickWand ();
> @@ -7549,6 +7552,7 @@
>                      img->data.lisp_val));
>  
>    DestroyMagickWand (ping_wand);
> +
>    /* Now, after pinging, we know how many images are inside the
>       file. If its not a bundle, just one.  */
>  
> @@ -7566,6 +7570,7 @@
>        if (im_image != NULL)
>  	{
>  	  image_wand = NewMagickWandFromImage (im_image);
> +          DestroyImage(im_image);
>  	  status = MagickTrue;
>  	}
>        else
> @@ -7576,7 +7581,7 @@
>        image_wand = NewMagickWand ();
>        status = MagickReadImageBlob (image_wand, contents, size);
>      }
> -  image_error ("im read failed", Qnil, Qnil);
> +
>    if (status == MagickFalse) goto imagemagick_error;
>  
>    /* If width and/or height is set in the display spec assume we want
> @@ -7805,11 +7810,13 @@
>  
>    /* Final cleanup. image_wand should be the only resource left. */
>    DestroyMagickWand (image_wand);
> +  MagickWandTerminus ();
>  
>    return 1;
>  
>   imagemagick_error:
>    DestroyMagickWand (image_wand);
> +  MagickWandTerminus ();
>    /* TODO more cleanup.  */
>    image_error ("Error parsing IMAGEMAGICK image `%s'", img->spec, Qnil);
>    return 0;
> @@ -8681,8 +8688,6 @@
>  #if defined (HAVE_IMAGEMAGICK)
>    if (EQ (type, Qimagemagick))
>      {
> -      /* MagickWandGenesis() initializes the imagemagick library.  */
> -      MagickWandGenesis ();
>        return CHECK_LIB_AVAILABLE (&imagemagick_type, init_imagemagick_functions,
>  				  libraries);
>      }
>
>
> Bye,
> Tassilo

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11 19:35               ` joakim
@ 2011-01-11 19:55                 ` Tassilo Horn
  0 siblings, 0 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-11 19:55 UTC (permalink / raw)
  To: joakim; +Cc: Emacs-devel, Jashy, Miles Bader

joakim@verona.se writes:

Hi!

>> Anyway, should I commit the following patch which includes your
>> DestroyImage() call that fixes the issue, and I additionally
>> surrounded image loading with calls to
>> MagickWandGenesis()/MagickWandTerminus(), because that's the way the
>> API is used throughout the example codes in the MagickWand API docs?
>
> The patch seems fine.

Ok, I'll commit it in some minutes.

> Im not entirely sure about genesis/terminus though, I interpreted the
> docs to mean genesis=library load.

The docs say initialize and terminate the MagickWand environment
whatever that means.  At least the docs indicate that the calls come in
pairs, and till now the terminus function was never called.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-11 19:10             ` Tassilo Horn
  2011-01-11 19:35               ` joakim
@ 2011-01-12  1:47               ` Stefan Monnier
  2011-01-12  7:37                 ` Tassilo Horn
  1 sibling, 1 reply; 29+ messages in thread
From: Stefan Monnier @ 2011-01-12  1:47 UTC (permalink / raw)
  To: Emacs-devel

> +  /* MagickWandGenesis() initializes the imagemagick library.  */

Nitpick: "MagickWandGenesis()" refers to the value returned by the
function, and that value doesn't initialize anything.  It should say

  /* `MagickWandGenesis' initializes the imagemagick library.  */

instead.


        Stefan



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Using the ImageMagick backend seems to leak memory
  2011-01-12  1:47               ` Stefan Monnier
@ 2011-01-12  7:37                 ` Tassilo Horn
  0 siblings, 0 replies; 29+ messages in thread
From: Tassilo Horn @ 2011-01-12  7:37 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> +  /* MagickWandGenesis() initializes the imagemagick library.  */
>
> Nitpick: "MagickWandGenesis()" refers to the value returned by the
> function, and that value doesn't initialize anything.  It should say
>
>   /* `MagickWandGenesis' initializes the imagemagick library.  */
>
> instead.

Ok, fixed.  I also added an equivalent comment to the MagickWandTerminus
call for reasons of symmetry.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2011-01-12  7:37 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-06  7:51 Using the ImageMagick backend seems to leak memory Tassilo Horn
2011-01-06  9:02 ` joakim
2011-01-06 10:20   ` Tassilo Horn
2011-01-07  4:17 ` Jashy
2011-01-07  4:59   ` Miles Bader
2011-01-07  6:27     ` Stephen J. Turnbull
2011-01-07  7:25       ` Miles Bader
2011-01-07  8:28     ` Tassilo Horn
2011-01-07 22:39       ` Andreas Schwab
2011-01-10 10:34         ` Tassilo Horn
2011-01-10 13:28           ` Jashy
2011-01-10 13:56             ` Tassilo Horn
2011-01-10 14:36               ` Jashy
2011-01-11 10:14                 ` Jashy
2011-01-11 10:59           ` joakim
2011-01-11 14:17       ` joakim
2011-01-11 14:38         ` joakim
2011-01-11 17:43         ` Tassilo Horn
2011-01-11 18:11           ` joakim
2011-01-11 19:10             ` Tassilo Horn
2011-01-11 19:35               ` joakim
2011-01-11 19:55                 ` Tassilo Horn
2011-01-12  1:47               ` Stefan Monnier
2011-01-12  7:37                 ` Tassilo Horn
2011-01-10 21:47 ` Tassilo Horn
2011-01-11  8:47   ` Tassilo Horn
2011-01-11  9:35     ` joakim
2011-01-11  9:53       ` Tassilo Horn
2011-01-11  9:54       ` joakim

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.