[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "Attempt to modify read-only object" error with set-frame-configurat

From: Eli Zaretskii
Subject: Re: "Attempt to modify read-only object" error with set-frame-configuration
Date: Sat, 22 Dec 2007 21:06:23 +0200

> Date: Thu, 20 Dec 2007 00:59:07 +0100
> From: "Juanma Barranquero" <address@hidden>
> Cc: emacs-devel <address@hidden>
> On Dec 19, 2007 10:32 PM, martin rudalics <address@hidden> wrote:
> > (visibility . t)
> I'd bet this causes the bug. Setting visibility causes problems on
> Windows since the multi-tty merge. See
> http://thread.gmane.org/gmane.emacs.devel/77325

I debugged this a bit.  The error is thrown from Fsetcdr, when it
checks its first arg `cell' for being pure.  Looking for the reason of
this, I found that Fsetcdr is called by store_frame_param in this
snippet (around line 2300 in frame.c):

  /* Update the frame parameter alist.  */
  old_alist_elt = Fassq (prop, f->param_alist);
  if (EQ (old_alist_elt, Qnil))
    f->param_alist = Fcons (Fcons (prop, val), f->param_alist);
    Fsetcdr (old_alist_elt, val);

GDB shows that old_alist_elt's value is 18412069 decimal or 118f225
hex, which indeed seems to be in pure space.  The value of
f->param_alist includes `(visibility)', and I verified by stepping
into Fassq that it finds this element of the alist, and then this last
line of Fassq:

  return CAR (list);

returns the offending value of 18412069, as the car of this list:

  ((visibility) (scroll-bar-width) (cursor-type . box) (auto-lower) 
(auto-raise) (icon-type) (title) (buffer-predicate) (tool-bar-lines . 1) 
(menu-bar-lines . 1) (right-fringe) (left-fringe) (line-spacing) (screen-gamma) 
(border-color . "black") (cursor-color . "black") (mouse-color . "black") 
(background-color . "SystemWindow") (foreground-color . "SystemWindowText") 
(vertical-scroll-bars . right) (internal-border-width . 0) (border-width . 2) 
(font . "-outline-Courier 

This is where I ran out of time.  Someone, please continue debugging.
The way to reproduce this is to run Emacs under GDB with the following

  (gdb) r -Q --eval "(setq default-frame-alist '((visibility . t)))"

reply via email to

[Prev in Thread] Current Thread [Next in Thread]