From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Valentin Gatien-Baron Newsgroups: gmane.emacs.bugs Subject: bug#27587: 25.1; in the dynamic modules api, env->free_global_ref doesn't free anything Date: Wed, 5 Jul 2017 08:43:26 -0400 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="94eb2c055296b08660055391580d" X-Trace: blaine.gmane.org 1499267235 15296 195.159.176.226 (5 Jul 2017 15:07:15 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 5 Jul 2017 15:07:15 +0000 (UTC) To: 27587@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Jul 05 17:07:12 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dSltV-0003in-Is for geb-bug-gnu-emacs@m.gmane.org; Wed, 05 Jul 2017 17:07:09 +0200 Original-Received: from localhost ([::1]:46624 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dSltb-0008RU-1g for geb-bug-gnu-emacs@m.gmane.org; Wed, 05 Jul 2017 11:07:15 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:60517) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dSltS-0008RB-7S for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 11:07:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dSltP-0008Ds-1q for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 11:07:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:50887) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dSltO-0008Dl-SO for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 11:07:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dSltO-0000aL-Mg for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 11:07:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Valentin Gatien-Baron Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 05 Jul 2017 15:07:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 27587 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.14992671752193 (code B ref -1); Wed, 05 Jul 2017 15:07:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 5 Jul 2017 15:06:15 +0000 Original-Received: from localhost ([127.0.0.1]:53564 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dSlsc-0000ZI-Rl for submit@debbugs.gnu.org; Wed, 05 Jul 2017 11:06:15 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:38025) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dSjef-0005j1-Gr for submit@debbugs.gnu.org; Wed, 05 Jul 2017 08:43:42 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dSjeZ-0006MD-Ai for submit@debbugs.gnu.org; Wed, 05 Jul 2017 08:43:36 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:46254) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dSjeZ-0006M9-79 for submit@debbugs.gnu.org; Wed, 05 Jul 2017 08:43:35 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57222) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dSjeX-0007q6-ST for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 08:43:34 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dSjeT-0006KW-0M for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 08:43:33 -0400 Original-Received: from mxout1.mail.janestreet.com ([38.105.200.78]:49213) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dSjeS-0006Jr-QR for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 08:43:28 -0400 Original-Received: from [172.27.56.106] (helo=tot-qpr-mailcore2) by mxout1.mail.janestreet.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89) (envelope-from ) id 1dSjeR-0000Tf-IQ for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 08:43:27 -0400 X-JS-Flow: external X-JS-Scanner-attachment: (ok) No attachments Original-Received: by tot-qpr-mailcore2 with ocaml/mailcore/mailcore 1.0+97 (cbf81801a3e2) (envelope-from ) id BZXN7v-AjPWpP-RY; 2017-07-05 08:43:27.560292-04:00 Original-Received: from mail-qk0-f198.google.com ([209.85.220.198]) by mxgoog1.mail.janestreet.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.89) (envelope-from ) id 1dSjeR-000548-H1 for bug-gnu-emacs@gnu.org; Wed, 05 Jul 2017 08:43:27 -0400 Original-Received: by mail-qk0-f198.google.com with SMTP id g89so115352688qkh.15 for ; Wed, 05 Jul 2017 05:43:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=google; h=mime-version:from:date:message-id:subject:to; bh=YX0Dhva4OA2SA/gkOSsRv1w2YzYharuUFTBNMf7mGDY=; b=GywUMc1lSXn5HOQIrUQBCtwTHtj1VuWZ9ghtpFGNF67oEg0L3oiWfU+EGQZwiKHKKN 0EiKrBq4tGPEHDMH0O+akGfUpTjLub68nCEpZL6IYiPxUF5U9gViM9k9E0oNnH7SkXLS bTKDy3nZFO4hucbQnlQq+Qg3MwRP9VGJx6fQU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=YX0Dhva4OA2SA/gkOSsRv1w2YzYharuUFTBNMf7mGDY=; b=akloAjA/dsmMrviNl/BtzoE5PSB4E1QghpwuRWLvZtxX7zmYxgfut4bwStkZDVyb1E eenCNkEm0/sU/glT+r5rJenWRN7JiHGDYUFFu8hKyzvdYa/7/N0rMidAxPJT4S07edo6 mU8YEyZdeJY2Dm47bjzCzsfS+TMyC9DH5mMWBryXnbSjbia/v0aI9NM9dR945SZzVbsH rqhyUgqew1PGf4MI9uXSjb4KxwIrN3OjgqiFWNoTgHdVYdsRy9FEZuwb5ridTM+FDx6o v1GkQxJO22RwQRJf6pYXd0iFxdFWIBqYM16J/sneyUzg85m7HOBuVrw74Ix/0I7ZhlZt doeQ== X-Gm-Message-State: AIVw111pNKEWSAz0CVasyPWu9SJzXoIeOMva4z221zQoCwi31a2HxPzU EEv9+lNkUge3+3l7TdmaSuYKYtmjkyrqmOB9Ii7ehlJIdIXB+/2lpxeknFpqqvgbR/Pgfm2J8GM 5tJ5icf2GBAq9jJR6nDBE X-Received: by 10.55.95.129 with SMTP id t123mr29204530qkb.119.1499258607144; Wed, 05 Jul 2017 05:43:27 -0700 (PDT) X-Received: by 10.55.95.129 with SMTP id t123mr29204513qkb.119.1499258606871; Wed, 05 Jul 2017 05:43:26 -0700 (PDT) Original-Received: by 10.12.156.10 with HTTP; Wed, 5 Jul 2017 05:43:26 -0700 (PDT) X-JS-Exim-Data-Received: 2017-07-05 08:43:27-0400 X-JS-Processed-by: mailcore X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Mailman-Approved-At: Wed, 05 Jul 2017 11:06:13 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] 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" Xref: news.gmane.org gmane.emacs.bugs:134208 Archived-At: --94eb2c055296b08660055391580d Content-Type: text/plain; charset="UTF-8" The following dynamic module takes unbounded memory: /* gcc -I . -g -ggdb -fPIC foo.c -shared -o foo.so && echo running && emacs -Q -L . -batch -l foo */ #include int plugin_is_GPL_compatible; int emacs_module_init(struct emacs_runtime *ert) { emacs_env *env = ert->get_environment(ert); while (1) { int i; for (i = 0; i < 10000; i++) { emacs_value v = env->make_string(env, "asdads", 3); env->free_global_ref(env, env->make_global_ref(env, v)); } env->funcall(env, env->intern(env, "garbage-collect"), 0, NULL); } } This is because env->make_global_ref/env->free_global_ref leak memory. env->free_global_ref fails to remove values from the hash table of refcounts. The following patch makes the program above run in constant space. --- src/emacs-module.c 2017-06-30 16:00:36.776301646 -0400 +++ src/emacs-module.c 2017-06-30 16:05:01.660120043 -0400 @@ -308,7 +308,7 @@ set_hash_value_slot (h, i, value); } else - hash_remove_from_table (h, value); + hash_remove_from_table (h, obj); } } --94eb2c055296b08660055391580d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
= The following dynamic module ta= kes unbounded memory:

/* gcc -I . -g = -ggdb -fPIC foo.c -shared -o foo.so && echo running && emac= s -Q -L . -batch -l foo */
#include <emacs-module.h>

int plugin_is_GPL_compatible;

<= /div>
int emacs_module_init(struct emacs_runtime *ert) {
=C2=A0 emac= s_env *env =3D ert->get_environment(ert);
=C2=A0 while (1) {
=C2=A0 =C2=A0 int i;
=C2=A0 =C2=A0 for (i =3D 0; i < = 10000; i++) {
=C2=A0 =C2=A0 =C2=A0 emacs_value v =3D env->make= _string(env, "asdads", 3);
=C2=A0 =C2=A0 =C2=A0 env->= ;free_global_ref(env, env->make_global_ref(env, v));
=C2=A0 = =C2=A0 }
=C2=A0 =C2=A0 env->funcall(env, env->intern(env, &= quot;garbage-collect"), 0, NULL);
=C2=A0 }
}


This is because env->make_global_ref/= env->free_global_ref leak memory.
env->free_global_ref fail= s to remove values from the hash table of
refcounts. The followin= g patch makes the program above run in constant
space.
=

--- src/emacs-module.c 2017-06-30 16:00:36.776301646 -0400
+++ src/emac= s-module.c 2017-06-30 16:05:01.66012= 0043 -0400
@@ -308,7 +308,7 @@
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0set_hash_value_slot (h, i, value);
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0}
=C2=A0 =C2=A0 =C2=A0 =C2=A0else<= /div>
- hash_remove_from_table (h, valu= e);
+ hash_remove_from_tab= le (h, obj);
=C2=A0 =C2=A0 =C2=A0}
=C2=A0}
=
--94eb2c055296b08660055391580d--