diff options
| author | Chong Yidong | 2011-02-27 17:57:22 -0500 |
|---|---|---|
| committer | Chong Yidong | 2011-02-27 17:57:22 -0500 |
| commit | 52eb77a6ad5df5980bc8c6d7ad7ee802feb8add3 (patch) | |
| tree | 693ac55d628a03992954b52a96630f348a425703 /src | |
| parent | b923f7a98fed9177f6f61a3aafb0ddbeb60abdad (diff) | |
| download | emacs-52eb77a6ad5df5980bc8c6d7ad7ee802feb8add3.tar.gz emacs-52eb77a6ad5df5980bc8c6d7ad7ee802feb8add3.zip | |
Avoid recording dead buffers in buffer-list frame param (Bug#7898).
* src/frame.c (store_frame_param): Don't store value directly in
buffer_list and buried_buffer_list; copy the list and remove dead
buffers.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 6 | ||||
| -rw-r--r-- | src/frame.c | 14 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index a7c9d4c7e3c..0e5e295a622 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2011-02-27 Chong Yidong <cyd@stupidchicken.com> | ||
| 2 | |||
| 3 | * frame.c (store_frame_param): Don't store value directly in | ||
| 4 | buffer_list and buried_buffer_list; copy the list and remove dead | ||
| 5 | buffers (Bug#7898). | ||
| 6 | |||
| 1 | 2011-02-27 Eli Zaretskii <eliz@gnu.org> | 7 | 2011-02-27 Eli Zaretskii <eliz@gnu.org> |
| 2 | 8 | ||
| 3 | * msdos.c (readlink) [DJGPP < 2.04]: New stub function. | 9 | * msdos.c (readlink) [DJGPP < 2.04]: New stub function. |
diff --git a/src/frame.c b/src/frame.c index 3a6900a572a..05938f3e1f0 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -2208,15 +2208,23 @@ store_frame_param (struct frame *f, Lisp_Object prop, Lisp_Object val) | |||
| 2208 | register Lisp_Object old_alist_elt; | 2208 | register Lisp_Object old_alist_elt; |
| 2209 | 2209 | ||
| 2210 | /* The buffer-list parameters are stored in a special place and not | 2210 | /* The buffer-list parameters are stored in a special place and not |
| 2211 | in the alist. */ | 2211 | in the alist. All buffers must be live. */ |
| 2212 | if (EQ (prop, Qbuffer_list)) | 2212 | if (EQ (prop, Qbuffer_list)) |
| 2213 | { | 2213 | { |
| 2214 | f->buffer_list = val; | 2214 | Lisp_Object list = Qnil; |
| 2215 | for (; CONSP (val); val = XCDR (val)) | ||
| 2216 | if (!NILP (Fbuffer_live_p (XCAR (val)))) | ||
| 2217 | list = Fcons (XCAR (val), list); | ||
| 2218 | f->buffer_list = Fnreverse (list); | ||
| 2215 | return; | 2219 | return; |
| 2216 | } | 2220 | } |
| 2217 | if (EQ (prop, Qburied_buffer_list)) | 2221 | if (EQ (prop, Qburied_buffer_list)) |
| 2218 | { | 2222 | { |
| 2219 | f->buried_buffer_list = val; | 2223 | Lisp_Object list = Qnil; |
| 2224 | for (; CONSP (val); val = XCDR (val)) | ||
| 2225 | if (!NILP (Fbuffer_live_p (XCAR (val)))) | ||
| 2226 | list = Fcons (XCAR (val), list); | ||
| 2227 | f->buried_buffer_list = Fnreverse (list); | ||
| 2220 | return; | 2228 | return; |
| 2221 | } | 2229 | } |
| 2222 | 2230 | ||