From: martin rudalics <rudalics@gmx.at>
To: Dan Nicolaescu <dann@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: emacs 24 randomly hanging
Date: Tue, 21 Feb 2012 17:54:13 +0100 [thread overview]
Message-ID: <4F43CC35.60407@gmx.at> (raw)
In-Reply-To: <yxqty2kkxcg.fsf@fencepost.gnu.org>
> It looks like there's an infinite loop in frame.c:next_frame.
Does the patch below help?
martin
=== modified file 'src/frame.c'
--- src/frame.c 2012-01-19 07:21:25 +0000
+++ src/frame.c 2012-02-21 16:46:43 +0000
@@ -924,7 +924,7 @@
static Lisp_Object
next_frame (Lisp_Object frame, Lisp_Object minibuf)
{
- Lisp_Object tail;
+ Lisp_Object tail, frames;
int passed = 0;
/* There must always be at least one frame in Vframe_list. */
@@ -935,58 +935,57 @@
forever. Forestall that. */
CHECK_LIVE_FRAME (frame);
+ frames = Fcopy_sequence (Vframe_list);
while (1)
- for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
+ for (tail = frames; CONSP (tail); tail = XCDR (tail))
{
Lisp_Object f;
f = XCAR (tail);
-
- if (passed
- && ((!FRAME_TERMCAP_P (XFRAME (f)) && !FRAME_TERMCAP_P (XFRAME (frame))
- && FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
- || (FRAME_TERMCAP_P (XFRAME (f)) && FRAME_TERMCAP_P (XFRAME (frame))
- && FRAME_TTY (XFRAME (f)) == FRAME_TTY (XFRAME (frame)))))
+ if (passed)
{
- /* Decide whether this frame is eligible to be returned. */
-
/* If we've looped all the way around without finding any
eligible frames, return the original frame. */
if (EQ (f, frame))
return f;
-
- /* Let minibuf decide if this frame is acceptable. */
- if (NILP (minibuf))
- {
- if (! FRAME_MINIBUF_ONLY_P (XFRAME (f)))
- return f;
- }
- else if (EQ (minibuf, Qvisible))
- {
- FRAME_SAMPLE_VISIBILITY (XFRAME (f));
- if (FRAME_VISIBLE_P (XFRAME (f)))
- return f;
- }
- else if (INTEGERP (minibuf) && XINT (minibuf) == 0)
- {
- FRAME_SAMPLE_VISIBILITY (XFRAME (f));
- if (FRAME_VISIBLE_P (XFRAME (f))
- || FRAME_ICONIFIED_P (XFRAME (f)))
- return f;
- }
- else if (WINDOWP (minibuf))
- {
- if (EQ (FRAME_MINIBUF_WINDOW (XFRAME (f)), minibuf)
- || EQ (WINDOW_FRAME (XWINDOW (minibuf)), f)
- || EQ (WINDOW_FRAME (XWINDOW (minibuf)),
- FRAME_FOCUS_FRAME (XFRAME (f))))
- return f;
- }
- else
- return f;
+ /* Decide whether this frame is eligible to be returned. */
+ else if ((!FRAME_TERMCAP_P (XFRAME (f)) && !FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
+ || (FRAME_TERMCAP_P (XFRAME (f)) && FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_TTY (XFRAME (f)) == FRAME_TTY (XFRAME (frame))))
+ {
+ /* Let minibuf decide if this frame is acceptable. */
+ if (NILP (minibuf))
+ {
+ if (! FRAME_MINIBUF_ONLY_P (XFRAME (f)))
+ return f;
+ }
+ else if (EQ (minibuf, Qvisible))
+ {
+ FRAME_SAMPLE_VISIBILITY (XFRAME (f));
+ if (FRAME_VISIBLE_P (XFRAME (f)))
+ return f;
+ }
+ else if (INTEGERP (minibuf) && XINT (minibuf) == 0)
+ {
+ FRAME_SAMPLE_VISIBILITY (XFRAME (f));
+ if (FRAME_VISIBLE_P (XFRAME (f))
+ || FRAME_ICONIFIED_P (XFRAME (f)))
+ return f;
+ }
+ else if (WINDOWP (minibuf))
+ {
+ if (EQ (FRAME_MINIBUF_WINDOW (XFRAME (f)), minibuf)
+ || EQ (WINDOW_FRAME (XWINDOW (minibuf)), f)
+ || EQ (WINDOW_FRAME (XWINDOW (minibuf)),
+ FRAME_FOCUS_FRAME (XFRAME (f))))
+ return f;
+ }
+ else
+ return f;
+ }
}
-
- if (EQ (frame, f))
+ else if (EQ (frame, f))
passed++;
}
}
next prev parent reply other threads:[~2012-02-21 16:54 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-19 5:28 emacs 24 randomly hanging Adam
2012-02-19 9:45 ` Adam
2012-02-19 9:54 ` Andreas Schwab
2012-02-20 7:23 ` Adam
2012-02-20 15:34 ` Dan Nicolaescu
2012-02-21 10:10 ` Adam
2012-02-21 10:43 ` Adam
2012-02-21 15:41 ` Dan Nicolaescu
2012-02-21 16:54 ` martin rudalics [this message]
2012-02-21 18:42 ` Adam
2012-02-22 8:26 ` martin rudalics
2012-02-22 9:01 ` Andreas Schwab
2012-02-22 9:41 ` martin rudalics
2012-02-22 14:49 ` Stefan Monnier
2012-02-24 18:43 ` martin rudalics
2012-02-22 10:55 ` Chong Yidong
2012-02-22 16:28 ` Eli Zaretskii
2012-02-23 8:05 ` Chong Yidong
2012-02-23 14:03 ` Christopher Schmidt
2012-02-23 16:39 ` Christopher Schmidt
2012-02-23 17:42 ` Chong Yidong
2012-02-24 18:43 ` martin rudalics
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F43CC35.60407@gmx.at \
--to=rudalics@gmx.at \
--cc=dann@gnu.org \
--cc=emacs-devel@gnu.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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.