bug-gnu-emacs
[Top][All Lists]
Advanced

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

Re: 23.0.60; Seg fault in xfaces.c at line 6703 (Emacs.app on GNUstep)


From: William Xu
Subject: Re: 23.0.60; Seg fault in xfaces.c at line 6703 (Emacs.app on GNUstep)
Date: Mon, 04 Feb 2008 13:40:15 +0900
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (darwin)

Chris Hall <cjh@insidernewswire.com> writes:

> Obviously, the possibility of the default face not being realized was
> anticipated by somebody, and considered serious enough to terminate
> execution -- there was already in place a check for exactly that, and
> the possibility of issuing a message and then deliberately 'erroring
> out' of the program if it hadn't been realized.

FYI, the carbon port in the trunk also suffers a similar problem after
the unicode-2 merge.  Namely, the default face can not be correctly
realized. The seg fault occurs in `realize_x_face' of xfaces.c.  If I
ignored it, emacs could be built and run, but everything is displayed as
boxes...

Related codes:  xfaces.c/(realized_x_face)

---------------------------------8<------------------------------------- 
     /* Determine the font to use.  Most of the time, the font will be
        the same as the font of the default face, so try that first.  */
     default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID);

     if (default_face
         && lface_same_font_attributes_p (default_face->lface, attrs))
     {
          face->font = default_face->font;
          face->font_info_id = default_face->font_info_id;
#ifdef USE_FONT_BACKEND
          face->font_info = default_face->font_info;
#endif  /* USE_FONT_BACKEND */
          face->font_name = default_face->font_name;
          face->fontset
               = make_fontset_for_ascii_face (f, default_face->fontset, face);
     }
     else
     {
          /* If the face attribute ATTRS specifies a fontset, use it as
             the base of a new realized fontset.  Otherwise, use the same
             base fontset as of the default face.  The base determines
             registry and encoding of a font.  It may also determine
             foundry and family.  The other fields of font name pattern
             are constructed from ATTRS.  */
          int fontset = face_fontset (attrs);

          /* If we are realizing the default face, ATTRS should specify a
             fontset.  In other words, if FONTSET is -1, we are not
             realizing the default face, thus the default face should have
             already been realized.  */
          if (fontset == -1)
               // (xwl): default_face is still NULL, and fontset is -1...
               fontset = default_face->fontset; //<-------------- crash here ! 
          if (fontset == -1)
               abort ();
#ifdef USE_FONT_BACKEND
          if (enable_font_backend)
               font_load_for_face (f, face);
          else
#endif  /* USE_FONT_BACKEND */
               load_face_font (f, face);

          if (face->font)
                face->fontset = make_fontset_for_ascii_face (f, fontset, face); 
*/
          else 
                face->fontset = -1;
     }

---------------------------------8<------------------------------------- 

-- 
William

http://williamxu.net9.org





reply via email to

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