From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Ken Brown Newsgroups: gmane.emacs.bugs Subject: bug#17510: 24.3.91; Problem with `emacs --daemon' in cygw32 build Date: Sat, 24 May 2014 08:38:14 -0400 Message-ID: <538092B6.9000807@cornell.edu> References: <53764FD9.8090600@cornell.edu> <53766FBC.1000601@cornell.edu> <5377F335.2080609@cornell.edu> <831tvremfz.fsf@gnu.org> <5378C404.8050405@cornell.edu> <83wqdjceah.fsf@gnu.org> <53790BAB.3020909@cornell.edu> <837g5hd8cf.fsf@gnu.org> <537A5AB4.8070602@cornell.edu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1400935172 12550 80.91.229.3 (24 May 2014 12:39:32 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 24 May 2014 12:39:32 +0000 (UTC) Cc: 17510@debbugs.gnu.org, dmantipov@yandex.ru To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat May 24 14:39:24 2014 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 1WoBEP-00059W-HF for geb-bug-gnu-emacs@m.gmane.org; Sat, 24 May 2014 14:39:21 +0200 Original-Received: from localhost ([::1]:47852 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WoBEO-0003XA-RX for geb-bug-gnu-emacs@m.gmane.org; Sat, 24 May 2014 08:39:20 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:43497) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WoBEE-0003Wq-Tw for bug-gnu-emacs@gnu.org; Sat, 24 May 2014 08:39:18 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WoBE7-0006Gs-DR for bug-gnu-emacs@gnu.org; Sat, 24 May 2014 08:39:10 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:59796) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WoBE7-0006Gl-9p for bug-gnu-emacs@gnu.org; Sat, 24 May 2014 08:39:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1WoBE6-0003FW-LE for bug-gnu-emacs@gnu.org; Sat, 24 May 2014 08:39:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ken Brown Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 24 May 2014 12:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 17510 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 17510-submit@debbugs.gnu.org id=B17510.140093511012446 (code B ref 17510); Sat, 24 May 2014 12:39:02 +0000 Original-Received: (at 17510) by debbugs.gnu.org; 24 May 2014 12:38:30 +0000 Original-Received: from localhost ([127.0.0.1]:58673 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WoBDZ-0003Ef-U2 for submit@debbugs.gnu.org; Sat, 24 May 2014 08:38:30 -0400 Original-Received: from limerock04.mail.cornell.edu ([128.84.12.60]:37535) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1WoBDV-0003E0-O7 for 17510@debbugs.gnu.org; Sat, 24 May 2014 08:38:26 -0400 X-CornellRouted: This message has been Routed already. Original-Received: from authusersmtp.mail.cornell.edu (granite3.serverfarm.cornell.edu [10.16.197.8]) by limerock04.mail.cornell.edu (8.14.4/8.14.4_cu) with ESMTP id s4OCcJFf005652; Sat, 24 May 2014 08:38:19 -0400 Original-Received: from [192.168.1.6] (cpe-67-249-194-47.twcny.res.rr.com [67.249.194.47]) (authenticated bits=0) by authusersmtp.mail.cornell.edu (8.14.4/8.12.10) with ESMTP id s4OCcHjs013153 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Sat, 24 May 2014 08:38:18 -0400 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 In-Reply-To: <537A5AB4.8070602@cornell.edu> 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: 140.186.70.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:89447 Archived-At: On 5/19/2014 3:25 PM, Ken Brown wrote: > On 5/19/2014 12:46 PM, Eli Zaretskii wrote: >> I guess it's OK for the branch, thanks. But it strikes me that simply >> replacing the car of dpyinfo->name_list_element by something like >> "!!!DELETED DISPLAY!!!", or even just an empty string, would serve the >> same purpose, and save us the nuisance of an additional list in >> cygw32_display_name_list. After all, all you need is to mark a >> display deleted without actually deleting it, right? IOW, the main >> problem is in x_delete_display, and all the rest is just the overhead >> you needed to fix that, correct? > > I think that's correct, and I agree that there should be a much simpler > fix. I'll have to look into the code and try to understand better > exactly what happens when emacs is started as a daemon and then a client > frame is opened and closed. My guess as to the cause of this bug was completely wrong. What happens in my recipe is that the pointer dpyinfo->w32_id_name is freed twice. (This is done in x_delete_display each time the only existing client frame is deleted.) An attempt to create a client frame for the third time then leads to a crash because of malloc corruption. I have no idea why this problem only showed up after Dmitry's code cleanup. The only thing I can think of is that maintaining a list of display names, with insertions and deletions, masked the malloc corruption. I think the right fix here would be to really delete the display when x_delete_display is called, free all resources, and set things up so that everything will be re-initialized if a new frame is created. But this seems like a lot of trouble, possibly with unintended consequences. The following is a much simpler workaround: === modified file 'src/w32term.c' --- src/w32term.c 2014-04-16 14:00:39 +0000 +++ src/w32term.c 2014-05-24 12:13:15 +0000 @@ -6426,7 +6426,9 @@ if (dpyinfo->palette) DeleteObject (dpyinfo->palette); } +#ifndef CYGWIN xfree (dpyinfo->w32_id_name); +#endif w32_reset_fringes (); } I would of course add a comment explaining this. What do you think? Ken