From debbugs-submit-bounces@debbugs.gnu.org Sat Sep 01 01:39:20 2018 Received: (at submit) by debbugs.gnu.org; 1 Sep 2018 05:39:20 +0000 Received: from localhost ([127.0.0.1]:41159 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fvycx-0004Kz-Dz for submit@debbugs.gnu.org; Sat, 01 Sep 2018 01:39:19 -0400 Received: from eggs.gnu.org ([208.118.235.92]:34269) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fvycv-0004Km-Es for submit@debbugs.gnu.org; Sat, 01 Sep 2018 01:39:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fvycn-0007EL-TG for submit@debbugs.gnu.org; Sat, 01 Sep 2018 01:39:11 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:49476) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fvycm-0007E4-Qo for submit@debbugs.gnu.org; Sat, 01 Sep 2018 01:39:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55240) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fvycl-0000gp-Rw for bug-gnu-emacs@gnu.org; Sat, 01 Sep 2018 01:39:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fvycg-00079s-Sl for bug-gnu-emacs@gnu.org; Sat, 01 Sep 2018 01:39:07 -0400 Received: from mathmail.math.s.chiba-u.ac.jp ([133.82.132.2]:59784) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fvycg-00076Z-Bn for bug-gnu-emacs@gnu.org; Sat, 01 Sep 2018 01:39:02 -0400 Received: from [192.168.33.40] (mitsu.math.s.chiba-u.ac.jp [133.82.132.19]) by mathmail.math.s.chiba-u.ac.jp (Postfix) with ESMTPSA id 91044F08EB for ; Sat, 1 Sep 2018 14:38:53 +0900 (JST) (envelope-from mituharu@math.s.chiba-u.ac.jp) From: YAMAMOTO Mitsuharu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\)) Subject: 26.1.50; memory leak in connect_network_socket Message-Id: Date: Sat, 1 Sep 2018 14:38:51 +0900 To: bug-gnu-emacs@gnu.org X-Mailer: Apple Mail (2.3273) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -6.0 (------) In connect_network_socket (in process.c), the memory pointed to by the variable `sa=E2=80=99 doesn=E2=80=99t seem to be deallocated. 3328 struct sockaddr *sa =3D NULL; : 3347 while (!NILP (addrinfos)) 3348 { : 3359 if (sa) 3360 free (sa); 3361 sa =3D xmalloc (addrlen); : 3533 } : The following patch would fix the leak: diff --git a/src/process.c b/src/process.c index 676f38446e..e5b70ca058 100644 --- a/src/process.c +++ b/src/process.c @@ -3576,6 +3576,8 @@ connect_network_socket (Lisp_Object proc, = Lisp_Object addrinfos, #endif } =20 + xfree (sa); + if (s < 0) { const char *err =3D (p->is_server Also, line 3359-3361 above could be: sa =3D xrealloc (addrlen); YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp In GNU Emacs 26.1.50 (build 1, x86_64-apple-darwin16.7.0) of 2018-09-01 built on YAMAMOTO-no-iMac-5K.local Repository revision: ac7936cb8f4d4d6706535bfcea0d97741c2ca15f Windowing system distributor 'The X.Org Foundation', version = 11.0.11804000 Recent messages: For information about GNU Emacs and the GNU system, type C-h C-a. Configured using: 'configure --without-ns --without-x-toolkit --without-gnutls --with-jpeg=3Dno --with-gif=3Dno --with-tiff=3Dno PKG_CONFIG=3D/opt/local/bin/pkg-config = PKG_CONFIG_PATH=3D/usr/lib/pkgconfig:/opt/X11/lib/pkgconfig:/usr/local/lib= /pkgconfig PKG_CONFIG_LIBDIR=3D --enable-checking=3Dyes,glyphs --enable-check-lisp-object-type CFLAGS=3D-g' Configured features: XPM PNG NOTIFY ACL LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB OLDXMENU X11 XDBE XIM THREADS Important settings: value of $LANG: ja_JP.UTF-8 locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils elec-pair time-date mule-util japan-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue dynamic-setting font-render-setting x multi-tty make-network-process emacs) Memory information: ((conses 16 97309 7262) (symbols 48 20210 2) (miscs 40 64 126) (strings 32 28170 1559) (string-bytes 1 745551) (vectors 16 14728) (vector-slots 8 572806 12294) (floats 8 54 90) (intervals 56 261 13) (buffers 992 12)) From debbugs-submit-bounces@debbugs.gnu.org Sat Sep 01 01:46:43 2018 Received: (at 32604) by debbugs.gnu.org; 1 Sep 2018 05:46:43 +0000 Received: from localhost ([127.0.0.1]:41166 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fvyk6-0004Wi-R9 for submit@debbugs.gnu.org; Sat, 01 Sep 2018 01:46:42 -0400 Received: from mathmail.math.s.chiba-u.ac.jp ([133.82.132.2]:59779) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fvyk4-0004WX-A5 for 32604@debbugs.gnu.org; Sat, 01 Sep 2018 01:46:40 -0400 Received: from mathent.math.s.chiba-u.ac.jp (mathent [192.168.32.5]) by mathmail.math.s.chiba-u.ac.jp (Postfix) with ESMTP id 3755FF08EB for <32604@debbugs.gnu.org>; Sat, 1 Sep 2018 14:46:38 +0900 (JST) (envelope-from mituharu@math.s.chiba-u.ac.jp) Date: Sat, 01 Sep 2018 14:46:38 +0900 Message-ID: From: YAMAMOTO Mitsuharu To: 32604@debbugs.gnu.org Subject: Re: bug#32604: 26.1.50; memory leak in connect_network_socket In-Reply-To: References: User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL/10.8 EasyPG/1.0.0 Emacs/25.3 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) Organization: Faculty of Science, Chiba University MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 32604 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > 3328 struct sockaddr *sa = NULL; > 3359 if (sa) > 3360 free (sa); > 3361 sa = xmalloc (addrlen); > Also, line 3359-3361 above could be: > sa = xrealloc (addrlen); Oops, I meant sa = xrealloc (sa, addrlen); of course. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 02 13:55:56 2018 Received: (at 32604) by debbugs.gnu.org; 2 Sep 2018 17:55:56 +0000 Received: from localhost ([127.0.0.1]:43272 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fwWbM-0002Za-Kd for submit@debbugs.gnu.org; Sun, 02 Sep 2018 13:55:56 -0400 Received: from mail-io0-f172.google.com ([209.85.223.172]:38381) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fwWbK-0002ZO-Mx for 32604@debbugs.gnu.org; Sun, 02 Sep 2018 13:55:55 -0400 Received: by mail-io0-f172.google.com with SMTP id y3-v6so14231465ioc.5 for <32604@debbugs.gnu.org>; Sun, 02 Sep 2018 10:55:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=AZgHRn7PskhBWDqG9sv21HEJh8+UpBZtPQ0XU2pKBjY=; b=qvfUfzaYNSiaiFLPswco33lqTp1mQfG7o7xM26Yhpg94JUuhy2gyOwfUEe6NDUqmbE 0l+KJZ3n3bdoknbo5wyEiCqeHqGtDaqZebMCSId2PjEhChYzhTUB8xkbTPbAwYCS+D4s 4QW5g72IIDccBAamkxg7MfsAlYRUUGBIzL5NRem76Yhu6VmKuFKYWF0lV6FVE2eSSCH9 plPA79hK3tdCy7fxBA2iCfOp2XbToYD+gvkUhwau+NPJIdRWeFe6vvi65lV1cOxuHD3Z HpmXSsDkm7FqHEI+FVjA64MbN8NuH8RAJDoLU8NDcfp+65rgp8ywFaP2TeqmG4UZciX7 Dlzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=AZgHRn7PskhBWDqG9sv21HEJh8+UpBZtPQ0XU2pKBjY=; b=IqFJLy5+LHBNFDWo06kxtOMFLB0IylkguHrbVLJvPDqYfJFKSYjywVRI6B5Jt0BZdD XVpDU+I5PWaUqW0ZxFHo0nMDtmQh1+bHDbxsL2n0ocC7+KsDRHTDCPMQyEjXVm6NxaXf GqO/02nF4AjtZEWVwOujZwITIAiaw9YIPmn+DE1TWeuy3tiRlWbgKiycJnHxjlW+9OiN 5/ldKpnX5IccqyLX0BwhGqE68mfbgOalGKV9X21v9x3kxNoJjosZB0uIB9ndjwL45IzK AmNPuCkRQjOuEfxht4Qm37YmXfWQsHzEP/aHEu3NIdOJk+Gb1BaWC2so9acD+Gg4gh2b BW9A== X-Gm-Message-State: APzg51COj5XLQnUKa5azAPrmPKuQlhoLflL1xJDe3ulLEt7M01gfFZIj BM/VbOgs+U78FOi0NyyjJTZtH2Yk X-Google-Smtp-Source: ANB0VdZKWr1gQunV6hNK3iDWSGRT34fS+Tb2RyQ2FU1KEHQUVLMvCdakVOt3BOiSjCDc8Um1iEcrsg== X-Received: by 2002:a6b:fa17:: with SMTP id p23-v6mr12994068ioh.101.1535910948942; Sun, 02 Sep 2018 10:55:48 -0700 (PDT) Received: from zebian (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id i77-v6sm4903025itb.16.2018.09.02.10.55.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 02 Sep 2018 10:55:48 -0700 (PDT) From: Noam Postavsky To: YAMAMOTO Mitsuharu Subject: Re: bug#32604: 26.1.50; memory leak in connect_network_socket References: Date: Sun, 02 Sep 2018 13:55:46 -0400 In-Reply-To: (YAMAMOTO Mitsuharu's message of "Sat, 1 Sep 2018 14:38:51 +0900") Message-ID: <87k1o3rdgd.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 32604 Cc: 32604@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) YAMAMOTO Mitsuharu writes: > In connect_network_socket (in process.c), the memory pointed to > by the variable `sa=E2=80=99 doesn=E2=80=99t seem to be deallocated. > > 3328 struct sockaddr *sa =3D NULL; > : > 3347 while (!NILP (addrinfos)) > 3348 { > : > 3359 if (sa) > 3360 free (sa); > 3361 sa =3D xmalloc (addrlen); > : > 3533 } > : > > The following patch would fix the leak: > + xfree (sa); I think we would need record_unwind_protect_ptr (xfree, sa); to handle the case where an error is signaled. Similar to how the socket closing is handled: /* Make us close S if quit. */ record_unwind_protect_int (close_file_unwind, s); From debbugs-submit-bounces@debbugs.gnu.org Mon Sep 03 02:02:06 2018 Received: (at 32604) by debbugs.gnu.org; 3 Sep 2018 06:02:06 +0000 Received: from localhost ([127.0.0.1]:43521 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fwhw5-00066I-W0 for submit@debbugs.gnu.org; Mon, 03 Sep 2018 02:02:06 -0400 Received: from mathmail.math.s.chiba-u.ac.jp ([133.82.132.2]:57659) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fwhw3-00065o-LH for 32604@debbugs.gnu.org; Mon, 03 Sep 2018 02:02:04 -0400 Received: from weber.math.s.chiba-u.ac.jp (weber [192.168.32.4]) by mathmail.math.s.chiba-u.ac.jp (Postfix) with ESMTP id 3264AF08FA; Mon, 3 Sep 2018 15:02:00 +0900 (JST) (envelope-from mituharu@math.s.chiba-u.ac.jp) Received: from 150.100.253.38 (SquirrelMail authenticated user mituharu) by weber.math.s.chiba-u.ac.jp with HTTP; Mon, 3 Sep 2018 15:02:00 +0900 Message-ID: <0aad35d46cfe7a15d67484205d19340c.squirrel@weber.math.s.chiba-u.ac.jp> In-Reply-To: <87k1o3rdgd.fsf@gmail.com> References: <87k1o3rdgd.fsf@gmail.com> Date: Mon, 3 Sep 2018 15:02:00 +0900 Subject: Re: bug#32604: 26.1.50; memory leak in connect_network_socket From: mituharu@math.s.chiba-u.ac.jp To: "Noam Postavsky" User-Agent: SquirrelMail/1.4.22-5.el6 MIME-Version: 1.0 Content-Type: text/plain;charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) Importance: Normal X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 32604 Cc: 32604@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > YAMAMOTO Mitsuharu writes: > >> In connect_network_socket (in process.c), the memory pointed to >> by the variable `sa’ doesn’t seem to be deallocated. >> >> 3328 struct sockaddr *sa = NULL; >> : >> 3347 while (!NILP (addrinfos)) >> 3348 { >> : >> 3359 if (sa) >> 3360free (sa); >> 3361 sa = xmalloc (addrlen); >> : >> 3533 } >> : >> >> The following patch would fix the leak: > >> + xfree (sa); > > I think we would need > > record_unwind_protect_ptr (xfree, sa); > > to handle the case where an error is signaled. Similar to how the > socket closing is handled: > > /* Make us close S if quit. */ > record_unwind_protect_int (close_file_unwind, s); > Indeed. Could someone double-check the patch below? YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp diff --git a/src/process.c b/src/process.c index 676f38446e..ff53b86844 100644 --- a/src/process.c +++ b/src/process.c @@ -3322,6 +3322,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, Lisp_Object use_external_socket_p) { ptrdiff_t count = SPECPDL_INDEX (); + ptrdiff_t count1 UNINIT; int s = -1, outch, inch; int xerrno = 0; int family; @@ -3344,6 +3345,9 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, /* Do this in case we never enter the while-loop below. */ s = -1; + record_unwind_protect_nothing (); + count1 = SPECPDL_INDEX (); + while (!NILP (addrinfos)) { Lisp_Object addrinfo = XCAR (addrinfos); @@ -3356,9 +3360,8 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, #endif addrlen = get_lisp_to_sockaddr_size (ip_address, &family); - if (sa) - free (sa); - sa = xmalloc (addrlen); + sa = xrealloc (sa, addrlen); + set_unwind_protect_ptr (count, xfree, sa); conv_lisp_to_sockaddr (family, ip_address, sa, addrlen); s = socket_to_use; @@ -3520,7 +3523,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, #endif /* !WINDOWSNT */ /* Discard the unwind protect closing S. */ - specpdl_ptr = specpdl + count; + specpdl_ptr = specpdl + count1; emacs_close (s); s = -1; if (0 <= socket_to_use) @@ -3591,6 +3594,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, Lisp_Object data = get_file_errno_data (err, contact, xerrno); pset_status (p, list2 (Fcar (data), Fcdr (data))); + unbind_to (count, Qnil); return; } @@ -3610,7 +3614,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, p->outfd = outch; /* Discard the unwind protect for closing S, if any. */ - specpdl_ptr = specpdl + count; + specpdl_ptr = specpdl + count1; if (p->is_server && p->socktype != SOCK_DGRAM) pset_status (p, Qlisten); @@ -3671,6 +3675,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, } #endif + unbind_to (count, Qnil); } /* Create a network stream/datagram client/server process. Treated From debbugs-submit-bounces@debbugs.gnu.org Tue Sep 04 19:19:59 2018 Received: (at 32604) by debbugs.gnu.org; 4 Sep 2018 23:19:59 +0000 Received: from localhost ([127.0.0.1]:46140 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fxKc2-0002Qh-RM for submit@debbugs.gnu.org; Tue, 04 Sep 2018 19:19:59 -0400 Received: from mail-it0-f47.google.com ([209.85.214.47]:51558) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fxKc0-0002QS-Nm for 32604@debbugs.gnu.org; Tue, 04 Sep 2018 19:19:57 -0400 Received: by mail-it0-f47.google.com with SMTP id e14-v6so7442376itf.1 for <32604@debbugs.gnu.org>; Tue, 04 Sep 2018 16:19:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=NCjxP+t2tSgL+hjAqhZgY0KlDj/1PAgYeLsl5SU6YZA=; b=KMkYd41Q1TP1b+xY0fI79JPL3j7Ce8WixWmmMYkasDcw8m4vqJBEkw9YwpCepKqAM8 2hWlFWIEShwgmoYhUM8wdWHubN+jdhylOzdt7hGEpbuUKkHIaBxk7YGYSQgskCcOf1R5 GkhxbybngBunXMgHAzmmz3dehOFdi+OvbEdaltGgLbGOC2K5tun2S0Gzc+zLUEfyWL+w h3wXUVyXEflQy/8HuUDZcH9lcMnU1eS1N6UHqAGySXbMkOzNHeoc2NbqUOoZlUFh09tH BQYgI5yS2iJ8BIU3J8rzSiqHcVWP8JKU++1ZCqjcm6kBpMP/awPpOEuZo2qF5ZM+Aena 77bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=NCjxP+t2tSgL+hjAqhZgY0KlDj/1PAgYeLsl5SU6YZA=; b=CrPkJwHpMyWAXuUESSczqj8BLl+ukp8jOD2ggLkHIXC+hqnLRZnOuC6Jay0coqx8Ua r6YX6h46jB39QjRG0DxhzsKaMIlc4se5gFPfrRZbqEPW8LxJ0v7LEz3VKpMjEnMtXUDG KT4iXHzjospjR22x1feEaBL4IDqYCsoipFSB8Ys5DnQf2172qvNCoEv99co51NLtk1kp sYRv2CyYNzYjCHnj+kiBpo01u7UXv5pGpYH898JDymYVkTIfDKxB3XCNOzwvKNElkSlF 76ijmlZuKd6RZ3GTrn6kn4uRFPheJeCfAJNdynrt8FNeYBbwmBq6kPwoAesECkvhcDEz UT0A== X-Gm-Message-State: APzg51CI1nZDgwNCLFMF3oEQ2mEVc7I88F8BQKyt91RIyeEl+377WrVS vgo1k3W28MPYF0fl1GBPglxmjD+V X-Google-Smtp-Source: ANB0VdbuP2u8RbObKXOxNSidMaJRA7qxjT46MPE9Y5ZL51zGNxHxrDSquNLqStZkKnGS53KgRu+aNA== X-Received: by 2002:a24:c682:: with SMTP id j124-v6mr2091691itg.143.1536103190170; Tue, 04 Sep 2018 16:19:50 -0700 (PDT) Received: from zebian (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id t64-v6sm506476ita.13.2018.09.04.16.19.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 04 Sep 2018 16:19:49 -0700 (PDT) From: Noam Postavsky To: mituharu@math.s.chiba-u.ac.jp Subject: Re: bug#32604: 26.1.50; memory leak in connect_network_socket References: <87k1o3rdgd.fsf@gmail.com> <0aad35d46cfe7a15d67484205d19340c.squirrel@weber.math.s.chiba-u.ac.jp> Date: Tue, 04 Sep 2018 19:19:48 -0400 In-Reply-To: <0aad35d46cfe7a15d67484205d19340c.squirrel@weber.math.s.chiba-u.ac.jp> (mituharu's message of "Mon, 3 Sep 2018 15:02:00 +0900") Message-ID: <87muswhmuj.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 32604 Cc: 32604@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Looks good to me; a couple of minor suggestions below. mituharu@math.s.chiba-u.ac.jp writes: > @@ -3322,6 +3322,7 @@ connect_network_socket (Lisp_Object proc, > Lisp_Object addrinfos, > Lisp_Object use_external_socket_p) > { > ptrdiff_t count = SPECPDL_INDEX (); > + ptrdiff_t count1 UNINIT; > int s = -1, outch, inch; > int xerrno = 0; > int family; > @@ -3344,6 +3345,9 @@ connect_network_socket (Lisp_Object proc, > Lisp_Object addrinfos, > /* Do this in case we never enter the while-loop below. */ > s = -1; > > + record_unwind_protect_nothing (); > + count1 = SPECPDL_INDEX (); Since we assume a C99 compiler now, you could just do ptrdiff_t count1 = SPECPDL_INDEX (); without having the UNINIT thing. Also, since free is harmless on a NULL pointer, you could just record an unwind protect at the top once, without having the nothing state, I think. From debbugs-submit-bounces@debbugs.gnu.org Wed Sep 05 19:50:38 2018 Received: (at 32604) by debbugs.gnu.org; 5 Sep 2018 23:50:38 +0000 Received: from localhost ([127.0.0.1]:47505 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fxhZG-0004gZ-2m for submit@debbugs.gnu.org; Wed, 05 Sep 2018 19:50:38 -0400 Received: from mathmail.math.s.chiba-u.ac.jp ([133.82.132.2]:54056) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fxhZE-0004gO-1B for 32604@debbugs.gnu.org; Wed, 05 Sep 2018 19:50:37 -0400 Received: from mathent.math.s.chiba-u.ac.jp (mathent [192.168.32.5]) by mathmail.math.s.chiba-u.ac.jp (Postfix) with ESMTP id 721D3F08F8; Thu, 6 Sep 2018 08:50:33 +0900 (JST) (envelope-from mituharu@math.s.chiba-u.ac.jp) Date: Thu, 06 Sep 2018 08:50:33 +0900 Message-ID: From: YAMAMOTO Mitsuharu To: Noam Postavsky Subject: Re: bug#32604: 26.1.50; memory leak in connect_network_socket In-Reply-To: <87muswhmuj.fsf@gmail.com> References: <87k1o3rdgd.fsf@gmail.com> <0aad35d46cfe7a15d67484205d19340c.squirrel@weber.math.s.chiba-u.ac.jp> <87muswhmuj.fsf@gmail.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL/10.8 EasyPG/1.0.0 Emacs/25.3 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) Organization: Faculty of Science, Chiba University MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 32604 Cc: 32604@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Wed, 05 Sep 2018 08:19:48 +0900, Noam Postavsky wrote: > > Looks good to me; a couple of minor suggestions below. > > mituharu@math.s.chiba-u.ac.jp writes: > > > @@ -3322,6 +3322,7 @@ connect_network_socket (Lisp_Object proc, > > Lisp_Object addrinfos, > > Lisp_Object use_external_socket_p) > > { > > ptrdiff_t count = SPECPDL_INDEX (); > > + ptrdiff_t count1 UNINIT; > > int s = -1, outch, inch; > > int xerrno = 0; > > int family; > > @@ -3344,6 +3345,9 @@ connect_network_socket (Lisp_Object proc, > > Lisp_Object addrinfos, > > /* Do this in case we never enter the while-loop below. */ > > s = -1; > > > > + record_unwind_protect_nothing (); > > + count1 = SPECPDL_INDEX (); > > Since we assume a C99 compiler now, you could just do > > ptrdiff_t count1 = SPECPDL_INDEX (); > > without having the UNINIT thing. Also, since free is harmless on a NULL > pointer, you could just record an unwind protect at the top once, > without having the nothing state, I think. Thanks for the comments. With C99, I would probably gather related things like: struct sockaddr *sa = NULL; ptrdiff_t count = SPECPDL_INDEX (); record_unwind_protect_nothing (); : while (!NILP (addrinfos)) { : sa = xrealloc (sa, addrlen); set_unwind_protect_ptr (count, xfree, sa); : } : unbind_to (count, Qnil); This looks much more idiomatic. We need to update specbinding according to (potential) change of the value of `sa' by xrealloc call. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp diff --git a/src/process.c b/src/process.c index 676f38446e..b0a327229c 100644 --- a/src/process.c +++ b/src/process.c @@ -3321,11 +3321,9 @@ static void connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, Lisp_Object use_external_socket_p) { - ptrdiff_t count = SPECPDL_INDEX (); int s = -1, outch, inch; int xerrno = 0; int family; - struct sockaddr *sa = NULL; int ret; ptrdiff_t addrlen; struct Lisp_Process *p = XPROCESS (proc); @@ -3344,6 +3342,11 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, /* Do this in case we never enter the while-loop below. */ s = -1; + struct sockaddr *sa = NULL; + ptrdiff_t count = SPECPDL_INDEX (); + record_unwind_protect_nothing (); + ptrdiff_t count1 = SPECPDL_INDEX (); + while (!NILP (addrinfos)) { Lisp_Object addrinfo = XCAR (addrinfos); @@ -3356,9 +3359,8 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, #endif addrlen = get_lisp_to_sockaddr_size (ip_address, &family); - if (sa) - free (sa); - sa = xmalloc (addrlen); + sa = xrealloc (sa, addrlen); + set_unwind_protect_ptr (count, xfree, sa); conv_lisp_to_sockaddr (family, ip_address, sa, addrlen); s = socket_to_use; @@ -3520,7 +3522,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, #endif /* !WINDOWSNT */ /* Discard the unwind protect closing S. */ - specpdl_ptr = specpdl + count; + specpdl_ptr = specpdl + count1; emacs_close (s); s = -1; if (0 <= socket_to_use) @@ -3591,6 +3593,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, Lisp_Object data = get_file_errno_data (err, contact, xerrno); pset_status (p, list2 (Fcar (data), Fcdr (data))); + unbind_to (count, Qnil); return; } @@ -3610,7 +3613,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, p->outfd = outch; /* Discard the unwind protect for closing S, if any. */ - specpdl_ptr = specpdl + count; + specpdl_ptr = specpdl + count1; if (p->is_server && p->socktype != SOCK_DGRAM) pset_status (p, Qlisten); @@ -3671,6 +3674,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, } #endif + unbind_to (count, Qnil); } /* Create a network stream/datagram client/server process. Treated From debbugs-submit-bounces@debbugs.gnu.org Wed Sep 05 20:04:37 2018 Received: (at 32604) by debbugs.gnu.org; 6 Sep 2018 00:04:37 +0000 Received: from localhost ([127.0.0.1]:47518 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fxhmn-00051Q-6Z for submit@debbugs.gnu.org; Wed, 05 Sep 2018 20:04:37 -0400 Received: from mail-it0-f50.google.com ([209.85.214.50]:37100) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fxhml-00051C-Fq for 32604@debbugs.gnu.org; Wed, 05 Sep 2018 20:04:35 -0400 Received: by mail-it0-f50.google.com with SMTP id h20-v6so11873375itf.2 for <32604@debbugs.gnu.org>; Wed, 05 Sep 2018 17:04:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=YB7O06eQqtwYlRNi7LCM/SVH1/L/jptN1cxK2YYbJNo=; b=aQ7ejixquj26PCWbz5/vD8gXSYkbkl/Zu9HYUrdFawez2RQITIafrrK8rPi4pqEjM+ a47PuvzygT0qA+vUsQ0Oo9VkUkb1350RF19tf7ZcyLSsmhf2XzSscBMESPn6szadF1qC mAh2PEIB2uwdqv1OPdnRnS9xTfsfOzcAHeBYTcUgVUPoBYE3ELnx4z73daoMmLIOR314 StY67gpDaYOxtcejQjXZPhxhgOtADohGXwunMY2SLXlhH//z5LJEUnQh+JF2liVKGITv Mho5ioWRtlHPdRx9AUogCFkmTRb+9pb6KeUVS1TYU8wzGwENkWyiW/gOAiFrmz6OohxS iG8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=YB7O06eQqtwYlRNi7LCM/SVH1/L/jptN1cxK2YYbJNo=; b=o+1CmhxulIB+8UlXkpv9HATMyNZphA/s1WnPqTA21kTdT6gibj7Tmk+runbdVtNrrF fhqDe1mGKZI7rWgoGTB1l6qJed7/I9Qzw27lLv177E/+mbFW1yG85Pfxo1MgG/uhFPqP Xq087xitvLpUdWqdRJKFcCwdnKmLXUEt9Y92ef3G5ezWtRibc9MYhXy01/CIdSLiHIC9 whSrrvaCrEF2l6xrrpVm9MJs7yMl4xzyW7Ev0Lp+bhHgLcu6Ae14xYTnLlgF4NPsSzei bHu7md1XXoVUojQqGI5rBmAO/DhEq2qj1jQ+RPn+Q47Oxt0i9KfKMLg7mBU+hmh3HfF/ 65pg== X-Gm-Message-State: APzg51DvZ1WJNuYxno/qgYnw6g7r1/jBGKkO6Ryauxd/6qEj4BeXI346 /phuEeDR02SD2D7J+yt6E7KIYmy1 X-Google-Smtp-Source: ANB0VdYmnvml5MBDr9A4u8etqyhVQ9DtCnJlGaB4UHOFJO5cGoBK4Q/M1fbc4M/05eFElUzunkgNWw== X-Received: by 2002:a24:ad11:: with SMTP id c17-v6mr759124itf.46.1536192269731; Wed, 05 Sep 2018 17:04:29 -0700 (PDT) Received: from zebian (cbl-45-2-119-34.yyz.frontiernetworks.ca. [45.2.119.34]) by smtp.googlemail.com with ESMTPSA id x30-v6sm9726377ita.2.2018.09.05.17.04.28 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 05 Sep 2018 17:04:29 -0700 (PDT) From: Noam Postavsky To: YAMAMOTO Mitsuharu Subject: Re: bug#32604: 26.1.50; memory leak in connect_network_socket References: <87k1o3rdgd.fsf@gmail.com> <0aad35d46cfe7a15d67484205d19340c.squirrel@weber.math.s.chiba-u.ac.jp> <87muswhmuj.fsf@gmail.com> Date: Wed, 05 Sep 2018 20:04:27 -0400 In-Reply-To: (YAMAMOTO Mitsuharu's message of "Thu, 06 Sep 2018 08:50:33 +0900") Message-ID: <87bm9bh4ok.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 32604 Cc: 32604@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) YAMAMOTO Mitsuharu writes: > We need to update specbinding according to (potential) change of the > value of `sa' by xrealloc call. Yes, you're right. I was confused and somehow dreamed up an extra level of indirection in the unwind_protect mechanism. From debbugs-submit-bounces@debbugs.gnu.org Thu Sep 06 19:41:46 2018 Received: (at 32604-done) by debbugs.gnu.org; 6 Sep 2018 23:41:46 +0000 Received: from localhost ([127.0.0.1]:48533 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fy3uD-0004Of-1R for submit@debbugs.gnu.org; Thu, 06 Sep 2018 19:41:46 -0400 Received: from mathmail.math.s.chiba-u.ac.jp ([133.82.132.2]:52514) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fy3uB-0004OW-14 for 32604-done@debbugs.gnu.org; Thu, 06 Sep 2018 19:41:43 -0400 Received: from mathent.math.s.chiba-u.ac.jp (mathent [192.168.32.5]) by mathmail.math.s.chiba-u.ac.jp (Postfix) with ESMTP id A2C9FF08F9 for <32604-done@debbugs.gnu.org>; Fri, 7 Sep 2018 08:41:40 +0900 (JST) (envelope-from mituharu@math.s.chiba-u.ac.jp) Date: Fri, 07 Sep 2018 08:41:40 +0900 Message-ID: From: YAMAMOTO Mitsuharu To: 32604-done@debbugs.gnu.org Subject: Re: bug#32604: 26.1.50; memory leak in connect_network_socket In-Reply-To: <87bm9bh4ok.fsf@gmail.com> References: <87k1o3rdgd.fsf@gmail.com> <0aad35d46cfe7a15d67484205d19340c.squirrel@weber.math.s.chiba-u.ac.jp> <87muswhmuj.fsf@gmail.com> <87bm9bh4ok.fsf@gmail.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL/10.8 EasyPG/1.0.0 Emacs/25.3 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) Organization: Faculty of Science, Chiba University MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 32604-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On Thu, 06 Sep 2018 09:04:27 +0900, Noam Postavsky wrote: > YAMAMOTO Mitsuharu writes: > > > We need to update specbinding according to (potential) change of the > > value of `sa' by xrealloc call. > > Yes, you're right. I was confused and somehow dreamed up an extra level > of indirection in the unwind_protect mechanism. Installed to the emacs-26 branch. Closing. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp From unknown Thu Sep 11 15:11:09 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Fri, 05 Oct 2018 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator