[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: X wizard needed

From: Jan D.
Subject: Re: X wizard needed
Date: Sun, 26 Jan 2003 14:35:16 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2a) Gecko/20020910

Jan D. wrote:

måndagen den 20 januari 2003 kl 01.50 skrev Richard Stallman:

[I sent this message a few weeks ago but did not get a response.
I hope we have someone who can help.]

Is there someone who knows how to trace X commands
to see what Emacs is sending that causes this memory leak?
Please send me mail if you can do it.

I can take a look.  xmon can be used to trace X traffic.  It is possible
that some X window is not deleted when updating the menus.  But I'll see
if I can find anything.

It turns out that no xmon was needed. It is a general memory leak that is present on all systems. It is both a leak in Emacs and a leak in the X server, since X windows aren't being deallocated. I think this should go into RC. Is it OK to put it in there (see attachement)? I've tested it under XFree86, GNU/Linux and Solaris ix86.

        Jan D.

Date: Thu, 9 Jan 2003 15:02:47 +0000
From: Alan Morgan <address@hidden>
To: address@hidden
Subject: Sun X server memory leak when running emacs 21.2
Sender: address@hidden

This bug report will be sent to the Free Software Foundation,
not to your local site managers!
Please write in English, because the Emacs maintainers do not have
translators to read other languages for them.

Your bug report will be posted to the address@hidden mailing list,
and to the gnu.emacs.bug news group.

In GNU Emacs 21.2.2 (sparc-sun-solaris2.6, OSF/Motif Version 1.2.6)
 of 2002-08-08 on athene
configured using `configure --with-x-toolkit=motif --prefix=/usr/local/src/edcad/gnu'
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: C
  locale-coding-system: nil
  default-enable-multibyte-characters: t

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

On Sun Solaris 2.6, when running emacs 21.2 with the menu bar enabled, the Sun X server's memory usage increases with time, eventually making the machine unreasonably slow. This does not occur in emacs 20, nor in 21.2 if the menu
bar is disabled.

To see the behaviour, start an X login session, monitor the virtual memory size of the Xsun process, and start a vanilla emacs with emacs -q. When emacs processes commands, the Xsun memory usage is seen to rise, usually in chunks of around 4-32k at a time. Opening files (with C-x C-f) and killing buffers (C-x C-k), with no other activity, seems to show the behaviour. If emacs is
left undisturbed (no input) then the memory usage does not rise but stays
constant, however doing C-x C-f then causes a rise again, even C-x C-f C-g,
i.e. an aborted find file has the same effect.

I am aware that this could be a bug in Xsun, not in emacs, but I'm sorry I don't know enough about the internals of X to know whether it is possible for an application to legitimately cause the Xsun process to expand, or if this has to imply a bug in the X implementation. I'd be interested to know which is
at fault.

Best Regards,


Dr Alan Morgan             |
Cambridge Consultants Ltd. |  Tel:  +44 (0)1223 420024 (switchboard)
Science Park               |        +44 (0)1223 392682 (direct)
Milton Road                |        +44 (0)7785 714790 (mobile)
Cambridge                  |  Fax:  +44 (0)1223 423373
CB4 0DW                    |  Email: address@hidden
England                    |

Index: lwlib/lwlib-Xm.c
RCS file: /cvsroot/emacs/emacs/lwlib/lwlib-Xm.c,v
retrieving revision 1.43
diff -c -r1.43 lwlib-Xm.c
*** lwlib/lwlib-Xm.c    22 Mar 2001 19:11:33 -0000      1.43
--- lwlib/lwlib-Xm.c    26 Jan 2003 13:28:55 -0000
*** 265,271 ****
          XtSetArg (al[0], XmNsubMenuId, &submenu); 
          XtGetValues (children[i], al, 1);
          if (submenu)
!           XtDestroyWidget (submenu);
          XtDestroyWidget (children[i]);
--- 265,274 ----
          XtSetArg (al[0], XmNsubMenuId, &submenu); 
          XtGetValues (children[i], al, 1);
          if (submenu)
!             {
!               destroy_all_children (submenu, 0);
!               XtDestroyWidget (submenu);
!             }
          XtDestroyWidget (children[i]);
*** 731,736 ****
--- 734,742 ----
              XtManageChild (button);
+           if (widget_list)
+             XtFree ((char*) widget_list);
    else if (!contents)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]