unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Tassilo Horn <tassilo@member.fsf.org>
Cc: Chong Yidong <cyd@stupidchicken.com>,
	emacs-devel@gnu.org, schwab@linux-m68k.org,
	James Cloos <cloos@jhcloos.com>, Eli Zaretskii <eliz@gnu.org>,
	"Jan D." <jan.h.d@swipnet.se>, Ulrich Mueller <ulm@gentoo.org>
Subject: Re: Killing a frame sometimes kills emacs
Date: Thu, 17 Nov 2011 21:05:14 -0500	[thread overview]
Message-ID: <jwvehx6kx9t.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <8762ijjbzu.fsf@tsdh.uni-koblenz.de> (Tassilo Horn's message of "Thu, 17 Nov 2011 11:10:13 +0100")

> I did that by using the patch below for about one month.  Since then,
> the crashes I had are gone, and working with multiple emacs X frames is
> fun again.  Should I go ahead and commit?

Good news, thanks.

> --8<---------------cut here---------------start------------->8---
> === modified file 'src/frame.c'
> --- src/frame.c 2011-11-17 09:09:20 +0000
> +++ src/frame.c 2011-11-17 10:05:11 +0000
> @@ -1358,7 +1358,11 @@
 
>      /* If needed, delete the terminal that this frame was on.
>         (This must be done after the frame is killed.) */
> -    terminal->reference_count--;
> +
> +    // FIXME: Deleting the terminal crashes emacs because of a GTK
> +    // bug.  See the thread starting with <87d3flnxoo.fsf@thinkpad.tsdh.de>
> +    // on emacs-devel.
> +    // terminal->reference_count--;
>      if (terminal->reference_count == 0)
>        {
>         Lisp_Object tmp;
> --8<---------------cut here---------------end--------------->8---

To avoid the risk of reaching 0 via wrap-around (yes, I know that
creating a billion frames in the life of a single session is unlikely,
but still), you could do:

     /* If needed, delete the terminal that this frame was on.
        (This must be done after the frame is killed.) */
     terminal->reference_count--;
#ifdef USE_GTK
    /* ... (Use C-style not C++ style comments) ... */
    if (terminal->reference_count == 0 && terminal->type == output_x_window)
      terminal->reference_count = 1;
#endif
     if (terminal->reference_count == 0)
       {
        Lisp_Object tmp;

Alternatively you could get the same result by changing the code that
initializes terminal->reference_count so that it starts at 1 rather than
at 0.


        Stefan



  parent reply	other threads:[~2011-11-18  2:05 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-31 20:16 Killing a frame sometimes kills emacs Tassilo Horn
2011-08-31 20:51 ` joakim
2011-08-31 23:06 ` chad
2011-09-01  2:53 ` Eli Zaretskii
2011-09-01  7:04   ` Tassilo Horn
2011-09-01 10:09   ` Tassilo Horn
2011-09-01 10:27     ` Eli Zaretskii
2011-09-01 10:42       ` Tassilo Horn
2011-09-01 10:56         ` Eli Zaretskii
2011-09-01 11:09           ` Tassilo Horn
2011-09-01 10:33     ` Andreas Schwab
2011-09-01 10:45       ` Tassilo Horn
2011-09-01 12:47         ` Jan D.
2011-09-01 13:05           ` Tassilo Horn
2011-09-01 15:29           ` Eli Zaretskii
2011-09-01 19:30             ` Ken Raeburn
2011-09-02 15:02               ` Andreas Schwab
2011-10-11  6:46             ` Tassilo Horn
2011-10-11 12:53               ` Stefan Monnier
2011-10-11 14:53                 ` Tassilo Horn
2011-10-11 17:38                   ` James Cloos
2011-10-11 19:17                     ` Tassilo Horn
2011-10-11 19:49                       ` Tassilo Horn
2011-10-12  2:04                     ` Chong Yidong
2011-10-12  6:49                       ` Tassilo Horn
2011-10-12 12:57                         ` Stefan Monnier
2011-11-17 10:10                           ` Tassilo Horn
2011-11-17 11:18                             ` Chong Yidong
2011-11-17 13:45                               ` Tassilo Horn
2011-11-17 16:34                                 ` Paul Eggert
2011-11-17 16:58                                   ` Tassilo Horn
2011-11-18  2:41                                   ` Chong Yidong
2011-11-18  2:05                             ` Stefan Monnier [this message]
2011-11-18  9:38                               ` Tassilo Horn
2012-01-20 23:29                                 ` andres.ramirez
2012-01-21  0:34                                   ` Glenn Morris
2012-01-21  8:02                                     ` andres.ramirez
2012-01-20 23:29                                 ` andres.ramirez
2011-10-11 17:56               ` Jan Djärv

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwvehx6kx9t.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=cloos@jhcloos.com \
    --cc=cyd@stupidchicken.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=jan.h.d@swipnet.se \
    --cc=schwab@linux-m68k.org \
    --cc=tassilo@member.fsf.org \
    --cc=ulm@gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).