From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Chong Yidong Newsgroups: gmane.emacs.devel Subject: Re: Memory leak in keyboard variables? Date: Thu, 11 Dec 2008 10:09:44 -0500 Message-ID: <87y6ymiw93.fsf@cyd.mit.edu> References: <87d4fzh0qc.fsf@cyd.mit.edu> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1229008305 14612 80.91.229.12 (11 Dec 2008 15:11:45 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 11 Dec 2008 15:11:45 +0000 (UTC) Cc: emacs-devel@gnu.org To: Andreas Schwab Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Dec 11 16:12:49 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1LAnDE-00021v-Mj for ged-emacs-devel@m.gmane.org; Thu, 11 Dec 2008 16:12:25 +0100 Original-Received: from localhost ([127.0.0.1]:45151 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LAnC3-0002dQ-B2 for ged-emacs-devel@m.gmane.org; Thu, 11 Dec 2008 10:11:11 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LAnAb-0001gb-9p for emacs-devel@gnu.org; Thu, 11 Dec 2008 10:09:41 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LAnAZ-0001ec-NB for emacs-devel@gnu.org; Thu, 11 Dec 2008 10:09:40 -0500 Original-Received: from [199.232.76.173] (port=35832 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LAnAZ-0001eU-GM for emacs-devel@gnu.org; Thu, 11 Dec 2008 10:09:39 -0500 Original-Received: from cyd.mit.edu ([18.115.2.24]:36369) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LAnAZ-0006jb-3j for emacs-devel@gnu.org; Thu, 11 Dec 2008 10:09:39 -0500 Original-Received: by cyd.mit.edu (Postfix, from userid 1000) id 6E38E57E04B; Thu, 11 Dec 2008 10:09:44 -0500 (EST) In-Reply-To: (Andreas Schwab's message of "Thu, 11 Dec 2008 10:30:07 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux) X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:106799 Archived-At: --=-=-= Andreas Schwab writes: >> input-decode-map is defined in keyboard.c, using DEFVAR_KBOARD. It >> is a Lisp_Misc_Kboard_Objfwd object, and if I'm not mistaken, such >> objects are not garbage-collected. > > All Objfwd types are not real objects on their own, but static markers > to tell the evaluator to look elsewhere for the value. If the > pointed-to object is still live then it will not be collected, of > course. > >> When the terminal is killed, are its keyboard's Lisp_Misc_Kboard_Objfwd >> objects freed? > > All such objects are allocated only once before dumping. I see. Some Lisp_Objects associated with this code are definitely being leaked, though. After a more rigorous test, I think the problem is not in xterm.el, but in encoded-kb.el. I used the following debug code to track how many conses are used: *** trunk/lisp/server.el.~1.175.~ 2008-11-18 11:53:41.000000000 -0500 --- trunk/lisp/server.el 2008-12-11 09:50:50.000000000 -0500 *************** *** 574,581 **** --- 574,584 ---- + (defvar my-gc-cons-tracker nil) + (defun server-create-tty-frame (tty type proc) (add-to-list 'frame-inherited-parameters 'client) + (push (caar (garbage-collect)) my-gc-cons-tracker) (let ((frame With this, I found that most of the unfreed memory is coming from a single spot in encoded-kbd-setup-keymap (encoded-kb.el:334): ((eq (coding-system-type coding) 'utf-8) (let ((i #xC0)) (while (< i 256) (define-key keymap (vector i) 'encoded-kbd-self-insert-utf-8) (setq i (1+ i)))) Attached is a graph of conses used verses number of emacsclient terminals allocated, over a total of 100 terminal open/close iterations. With the present code, the number of conses used grows linearly. If that section of code is commented out, the curve is almost flat. --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=encoded-kbd-leak.png Content-Transfer-Encoding: base64 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 --=-=-= So either the way the encoded-kbd map is set up prevents garbage-collection from working (e.g., it might set up some kind of circular structure), or there is a bug that prevents us from freeing keymaps associated with deleted keyboards. --=-=-=--