From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dima Kogan Newsgroups: gmane.emacs.bugs Subject: bug#21556: 25.0.50; Memory leak in emacs -Q with lucid (font) Date: Tue, 29 Sep 2015 02:28:56 -0700 Message-ID: <87oagl376v.fsf@secretsauce.net> References: <87zj082t34.fsf@gnu.org> <83io6wffm9.fsf@gnu.org> <87lhbqdhjp.fsf@secretsauce.net> <83d1x2eugp.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1443549528 9663 80.91.229.3 (29 Sep 2015 17:58:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 29 Sep 2015 17:58:48 +0000 (UTC) Cc: dmantipov@yandex.ru, 21556@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Sep 29 19:58:36 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ZgzAd-0003cL-Tp for geb-bug-gnu-emacs@m.gmane.org; Tue, 29 Sep 2015 19:58:32 +0200 Original-Received: from localhost ([::1]:53955 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZgzAc-0000Bq-Ux for geb-bug-gnu-emacs@m.gmane.org; Tue, 29 Sep 2015 13:58:30 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57542) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZgrEe-0003TY-ER for bug-gnu-emacs@gnu.org; Tue, 29 Sep 2015 05:30:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZgrEb-0005Bn-4s for bug-gnu-emacs@gnu.org; Tue, 29 Sep 2015 05:30:08 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:58291) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZgrEb-0005BI-0O for bug-gnu-emacs@gnu.org; Tue, 29 Sep 2015 05:30:05 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1ZgrEZ-0006Oy-UZ for bug-gnu-emacs@gnu.org; Tue, 29 Sep 2015 05:30:04 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Dima Kogan Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Sep 2015 09:30:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21556 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 21556-submit@debbugs.gnu.org id=B21556.144351894324519 (code B ref 21556); Tue, 29 Sep 2015 09:30:03 +0000 Original-Received: (at 21556) by debbugs.gnu.org; 29 Sep 2015 09:29:03 +0000 Original-Received: from localhost ([127.0.0.1]:47262 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZgrDa-0006NP-Pv for submit@debbugs.gnu.org; Tue, 29 Sep 2015 05:29:03 -0400 Original-Received: from out3-smtp.messagingengine.com ([66.111.4.27]:44576) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZgrDY-0006Mz-Uh for 21556@debbugs.gnu.org; Tue, 29 Sep 2015 05:29:01 -0400 Original-Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id E1EB520B58 for <21556@debbugs.gnu.org>; Tue, 29 Sep 2015 05:28:58 -0400 (EDT) Original-Received: from frontend2 ([10.202.2.161]) by compute6.internal (MEProxy); Tue, 29 Sep 2015 05:28:58 -0400 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=secretsauce.net; h=cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=v7gV1 n5WKG2NaGYwOT5h19tPlg4=; b=LqCAGOlYkfSeYllpU2ZMrXQ0g/l8QB7vVhQAi ljlmJ3gpZjnSg90jZPYIfcinq5HKkxh9ifEd2AyC095gTkC9XDf8EyK8nrgpe5d8 aj7AXkS0b9LX41JxyskHhOSf82xRdmlIt7X8oNIv07LgPdDed2azHs3X1oq7wa8W RosIiY= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-sasl-enc :x-sasl-enc; s=smtpout; bh=v7gV1n5WKG2NaGYwOT5h19tPlg4=; b=jsGtV B9ViUwXqWjWFYTXfaSfq/V5eW93YvZW72F0nKI6iOFVn3UkpPLM1W7Qq7fH3Ayvi /BsbjdtO08pkrMpRRDYFUMfgf8sB8GvVECnCBPMI06sb8E29Yz9NvyfNcLGulx8+ S5UVZ3bhyfXs7q9K87zk6GIcSzXZ3fbNW5Jy+0= X-Sasl-enc: T8MTT33s2KkCPNFXNuYvirOnBqBpHlpaVQ9dgLazdk7P 1443518938 Original-Received: from shorty.local (50-1-153-216.dsl.dynamic.fusionbroadband.com [50.1.153.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 8762F680117; Tue, 29 Sep 2015 05:28:58 -0400 (EDT) Original-Received: from ip6-localhost ([::1] helo=shorty) by shorty.local with esmtp (Exim 4.84) (envelope-from ) id 1ZgrDU-0007jp-U2; Tue, 29 Sep 2015 02:28:56 -0700 In-reply-to: <83d1x2eugp.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:107049 Archived-At: --=-=-= Content-Type: text/plain Eli Zaretskii writes: > So, if you prefer not to invest any time in investigating the font > marking code, let's wait for Dmitry to respond, and make the decision > when he does (or when we give up waiting). I guess I preferred to invest more time. I found and fixed the bug, and the patch is attached. The issue was that the compaction code wasn't checking all the right lisp objects for the marks. The font entities were storing a list of fonts, and this list had to be traversed, looking for the marks. See font_clear_cache() for a function that WAS traversing the full list. I'm certain there are more leaks here, but bug 21509 is now the main leaker with my current test case. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-compact_font_cache_entry-now-properly-checks-for-mar.patch >From e9b0394826c4e706550259cd3862a89343c6cf2b Mon Sep 17 00:00:00 2001 From: Dima Kogan Date: Tue, 29 Sep 2015 02:19:35 -0700 Subject: [PATCH] compact_font_cache_entry() now properly checks for marked fonts * src/alloc.c (compact_font_cache_entry): When checking for marked fonts we were looking at a font entity object. However the entity could contain a list of font objects that need to be checked, which we now do. This resolves a memory leak Fixes: bug#21556 --- src/alloc.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/alloc.c b/src/alloc.c index 3ab2a6e..03df258 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -5303,8 +5303,31 @@ compact_font_cache_entry (Lisp_Object entry) are not marked too. But we must be sure that nothing is marked within OBJ before we really drop it. */ for (i = 0; i < size; i++) - if (VECTOR_MARKED_P (XFONT_ENTITY (AREF (XCDR (obj), i)))) - break; + { + Lisp_Object objlist; + bool any_fonts_marked; + + if (VECTOR_MARKED_P (XFONT_ENTITY (AREF (XCDR (obj), i)))) + break; + + objlist = AREF (AREF (XCDR (obj), i), FONT_OBJLIST_INDEX); + any_fonts_marked = false; + + for (; CONSP (objlist); objlist = XCDR (objlist)) + { + Lisp_Object val = XCAR (objlist); + struct font *font = XFONT_OBJECT (val); + + if (! NILP (AREF (val, FONT_TYPE_INDEX)) && + VECTOR_MARKED_P(font)) + { + any_fonts_marked = true; + break; + } + } + if(any_fonts_marked) + break; + } if (i == size) drop = 1; -- 2.1.4 --=-=-=--