From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14062 invoked by alias); 23 Feb 2015 17:32:28 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 34623 Received: (qmail 17386 invoked from network); 23 Feb 2015 17:32:18 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS autolearn=ham version=3.3.2 X-AuditID: cbfec7f4-b7f126d000001e9a-82-54eb638db143 Date: Mon, 23 Feb 2015 17:32:10 +0000 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: PATCH: Remeta one frame earlier Message-id: <20150223173210.494f88ea@pwslap01u.europe.root.pri> In-reply-to: <1424701975-17215-1-git-send-email-mikachu@gmail.com> References: <20150223140541.6cdb0fc2@pwslap01u.europe.root.pri> <1424701975-17215-1-git-send-email-mikachu@gmail.com> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 Content-transfer-encoding: quoted-printable X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKLMWRmVeSWpSXmKPExsVy+t/xq7q9ya9DDBrfS1scbH7I5MDoserg B6YAxigum5TUnMyy1CJ9uwSujN4FOxgLnnFW9Fz8zNbAuIG9i5GTQ0LARGL32n5mCFtM4sK9 9WxdjFwcQgJLGSXuvnvMBOEsYZJomjyJBcLZxihx8OwJJpAWFgFViZbN28BsNgFDiambZjOC 2CIC4hJn155nAbGFBXQkvs/5B7aCV8Be4n7XaqAaDg5OASeJrSeTQMJCAuUSTWensoHY/AL6 Elf/fmKCuMheYuaVM4wQrYISPybfAxvJLKAuMWneImYIW1viybsLrBBz1CVu3N3NPoFRaBaS lllIWmYhaVnAyLyKUTS1NLmgOCk911CvODG3uDQvXS85P3cTIyRov+xgXHzM6hCjAAejEg/v g7JXIUKsiWXFlbmHGCU4mJVEeLsSXocI8aYkVlalFuXHF5XmpBYfYmTi4JRqYAzJn1gt++ue d3aJ6QodnQSmzkcbv6iVPTPk+8XkWH9R2Otz6sJgHgfe5AMNN9+fX7aZyUcz+vvsNbwL5Hrn fBOzcItdYXRSOvfwnrvT1myyTNKQlEx62P5/zc5spto6QXaxa9fsj9ZoPP7RXnrks+8Zpa1v dnenccwPyNvpHcuzxUqGeSVTqhJLcUaioRZzUXEiAOjiCoc4AgAA On Mon, 23 Feb 2015 15:32:55 +0100 Mikael Magnusson wrote: > > If we do stick with the heap, I'm wondering if we need to free it more > > often than we do. Maybe the freeheap() below should be if (uselex || > > remeta), and maybe it should be right at the end of the loop for > > safety. >=20 > I'll leave this part to you... At least nothing after the freeheap() > uses pt, so it shouldn't be any less safe than before=E2=84=A2. pws diff --git a/Src/hist.c b/Src/hist.c index c530e72..aa07ce8 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -2593,8 +2593,6 @@ readhistfile(char *fn, int err, int readflags) start =3D pt; uselex =3D isset(HISTLEXWORDS) && !(readflags & HFILE_FAST); histsplitwords(pt, &words, &nwords, &nwordpos, uselex); - if (uselex) - freeheap(); =20 he->nwords =3D nwordpos/2; if (he->nwords) { @@ -2607,6 +2605,12 @@ readhistfile(char *fn, int err, int readflags) freehistnode(&he->node); curhist--; } + /* + * Do this last out of paranoia in case use of + * heap is disguised... + */ + if (uselex || remeta) + freeheap(); } if (start && readflags & HFILE_USE_OPTIONS) { zsfree(lasthist.text);