From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Kenichi Handa Newsgroups: gmane.emacs.devel Subject: Re: GC crashes Date: Mon, 8 Dec 2003 15:05:01 +0900 (JST) Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <200312080605.PAA13041@etlken.m17n.org> References: <20031124.110938.193696628.wl@gnu.org> <200311260203.LAA26808@etlken.m17n.org> <20031128.103107.41640217.wl@gnu.org> <200312011240.VAA05762@etlken.m17n.org> <200312022337.IAA02026@etlken.m17n.org> <200312032319.IAA04473@etlken.m17n.org> <200312040112.KAA04711@etlken.m17n.org> <200312040221.LAA04807@etlken.m17n.org> <200312080231.LAA12773@etlken.m17n.org> <200312080501.OAA12954@etlken.m17n.org> NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 (generated by SEMI 1.14.3 - "Ushinoya") Content-Type: text/plain; charset=US-ASCII X-Trace: sea.gmane.org 1070863691 22734 80.91.224.253 (8 Dec 2003 06:08:11 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 8 Dec 2003 06:08:11 +0000 (UTC) Cc: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Mon Dec 08 07:08:05 2003 Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1ATEYv-0005QH-00 for ; Mon, 08 Dec 2003 07:08:05 +0100 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.35 #1 (Debian)) id 1ATEYu-0001kf-00 for ; Mon, 08 Dec 2003 07:08:05 +0100 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.24) id 1ATFUT-0003vn-0Q for emacs-devel@quimby.gnus.org; Mon, 08 Dec 2003 02:07:33 -0500 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.24) id 1ATFU0-0003pa-L6 for emacs-devel@gnu.org; Mon, 08 Dec 2003 02:07:04 -0500 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.24) id 1ATFTU-0003ko-Lj for emacs-devel@gnu.org; Mon, 08 Dec 2003 02:07:03 -0500 Original-Received: from [192.47.44.130] (helo=tsukuba.m17n.org) by monty-python.gnu.org with esmtp (Exim 4.24) id 1ATFTT-0003kd-Tf for emacs-devel@gnu.org; Mon, 08 Dec 2003 02:06:32 -0500 Original-Received: from fs.m17n.org (fs.m17n.org [192.47.44.2]) by tsukuba.m17n.org (8.11.6p2/3.7W-20010518204228) with ESMTP id hB8651h22011; Mon, 8 Dec 2003 15:05:01 +0900 (JST) (envelope-from handa@m17n.org) Original-Received: from etlken.m17n.org (etlken.m17n.org [192.47.44.125]) by fs.m17n.org (8.11.6/3.7W-20010823150639) with ESMTP id hB8651s22558; Mon, 8 Dec 2003 15:05:01 +0900 (JST) Original-Received: (from handa@localhost) by etlken.m17n.org (8.8.8+Sun/3.7W-2001040620) id PAA13041; Mon, 8 Dec 2003 15:05:01 +0900 (JST) Original-To: monnier@iro.umontreal.ca In-reply-to: (message from Stefan Monnier on 08 Dec 2003 00:16:40 -0500) User-Agent: SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/21.3 (sparc-sun-solaris2.6) MULE/5.0 (SAKAKI) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.2 Precedence: list List-Id: Emacs development discussions. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:18537 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:18537 In article , Stefan Monnier writes: > You said that the value associated with each key is always > an integer, right? In that case, the value is always > survive_gc_p, so it will never cause the key&value pair to > be removed, ??? See this code of sweep_weak_table (in fns.c). for (idx = HASH_INDEX (h, bucket); !GC_NILP (idx); idx = next) { int i = XFASTINT (idx); int key_known_to_survive_p = survives_gc_p (HASH_KEY (h, i)); int value_known_to_survive_p = survives_gc_p (HASH_VALUE (h, i)); int remove_p; if (EQ (h->weak, Qkey)) remove_p = !key_known_to_survive_p; else if (EQ (h->weak, Qvalue)) remove_p = !value_known_to_survive_p; else if (EQ (h->weak, Qkey_or_value)) remove_p = !(key_known_to_survive_p || value_known_to_survive_p); else if (EQ (h->weak, Qkey_and_value)) remove_p = !(key_known_to_survive_p && value_known_to_survive_p); else abort (); If h->weak is Qkey, it sets remove_p only by checking key_known_to_survive_p. So, it seems that wether the value survives GC or not doesn't matter in this case. --- Ken'ichi HANDA handa@m17n.org