From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: lorentey@elte.hu (=?utf-8?Q?K=C3=A1roly_L=C5=91rentey?=) Newsgroups: gmane.emacs.multi-tty,gmane.emacs.devel Subject: Face alias bugs (Re: abort() in keyboard.c) Date: Wed, 13 Apr 2005 07:48:02 +0200 Message-ID: References: <87u0myhffz.fsf@fischman.org> <87vf7deeme.fsf@fischman.org> <87hdivjic5.fsf@fischman.org> <87fyy1d9jx.fsf_-_@fischman.org> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1929400334==" X-Trace: sea.gmane.org 1113399108 18051 80.91.229.2 (13 Apr 2005 13:31:48 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 13 Apr 2005 13:31:48 +0000 (UTC) Cc: multi-tty@lists.fnord.hu Original-X-From: multi-tty-bounces@lists.fnord.hu Wed Apr 13 15:31:44 2005 Return-path: Original-Received: from ninsei.hu ([212.92.23.158] helo=chatsubo.ninsei.hu) by ciao.gmane.org with esmtp (Exim 4.43) id 1DLhvx-0001Yp-Ju for gem-multi-tty@m.gmane.org; Wed, 13 Apr 2005 15:29:36 +0200 Original-Received: from [127.0.0.1] (nixon [127.0.0.1]) by chatsubo.ninsei.hu (Postfix) with ESMTP id BD2C51AE02; Wed, 13 Apr 2005 15:32:38 +0200 (CEST) Original-Received: from walrus (pcitislory.cern.ch [137.138.41.46]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by chatsubo.ninsei.hu (Postfix) with ESMTP id 755601ADBB; Wed, 13 Apr 2005 15:32:35 +0200 (CEST) Original-Received: by walrus (Postfix, from userid 1000) id E5B082B90A; Wed, 13 Apr 2005 07:48:02 +0200 (CEST) Original-To: emacs-devel@gnu.org X-Face: 'En&2832W(@ewy5g1U"#y@9QIA5Ko, -nD`s[9D+/5g^PSGLTyV&be8/lc-aTc&JPpgbJ-8f 2f*2:@kvpQ:"H^R*;0f1.$ In-Reply-To: (=?utf-8?Q?K=C3=A1roly=09L=C5=91rentey's?= message of "Fri, 08 Apr 2005 17:57:22 +0200") User-Agent: Gnus/5.110003 (No Gnus v0.3) Emacs/22.0.50 (gnu/linux) X-BeenThere: multi-tty@lists.fnord.hu X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions of multiple tty support in Emacs List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Mime-version: 1.0 Original-Sender: multi-tty-bounces@lists.fnord.hu Errors-To: multi-tty-bounces@lists.fnord.hu Xref: news.gmane.org gmane.emacs.multi-tty:216 gmane.emacs.devel:35935 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:35935 --===============1929400334== Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Transfer-Encoding: quoted-printable I have received a backtrace for an aborted multi-tty session from Ami Fischman that is relevant to the trunk as well. The abort was caused by Emacs entering the debugger during redisplay because of a property list on a face symbol that was not a well-formed Lisp list (see frames #23-26 in the backtrace at the bottom). Beside the (rare) crash condition, there are other symptoms that are easier to reproduce. For example (in a recent CVS): emacs -q (setplist 'default (append (symbol-plist 'default) (cons 'foo 'bar))) C-h i Recursive aliases are fun as well: emacs -q (put 'foo 'face-alias 'default)=20 (put 'default 'face-alias 'foo) C-h i The patch below fixes all these problems by protecting the call to Fget inside resolve_face_name and limiting the number of indirections during a single face lookup. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=face-crash.patch Content-Transfer-Encoding: quoted-printable *** orig/src/xfaces.c =2D-- mod/src/xfaces.c *************** *** 3201,3206 **** =2D-- 3201,3220 ---- =20=20 =20=20 + static Lisp_Object + internal_resolve_face_name (nargs, args) + int nargs; + Lisp_Object *args; + { + return Fget (args[0], args[1]); + } +=20 + static Lisp_Object + resolve_face_name_error (ignore) + Lisp_Object ignore; + { + return Qnil; + } =20=20 /* Resolve face name FACE_NAME. If FACE_NAME is a string, intern it to make it a symvol. If FACE_NAME is an alias for another face, *************** *** 3211,3227 **** Lisp_Object face_name; { Lisp_Object aliased; =20=20 if (STRINGP (face_name)) face_name =3D intern (SDATA (face_name)); =20=20 ! while (SYMBOLP (face_name)) { ! aliased =3D Fget (face_name, Qface_alias); if (NILP (aliased)) break; else face_name =3D aliased; } =20=20 return face_name; =2D-- 3225,3249 ---- Lisp_Object face_name; { Lisp_Object aliased; + Lisp_Object args[2]; + int c =3D 0; =20=20 if (STRINGP (face_name)) face_name =3D intern (SDATA (face_name)); =20=20 ! /* Protect against loops by limiting the number of indirections. */ ! while (SYMBOLP (face_name) && c < 10) { ! /* Fget can signal an error; just ignore it. */ ! args[0] =3D face_name; ! args[1] =3D Qface_alias; ! aliased =3D internal_condition_case_2 (internal_resolve_face_name, = 2, args, Qt, ! resolve_face_name_error); if (NILP (aliased)) break; else face_name =3D aliased; + c++; } =20=20 return face_name; --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ami Fischman writes: > I just had an abort hit in an emacs session running under gdb under scree= n, > with X frames open at work and home. The backtrace is after my .sig. Not > really sure what if any useful info can be gleaned from it. Does this ri= ng > any bells for anyone? > > #0 0x402feae1 in __kill () from /lib/i686/libc.so.6 > #1 0x080d8cfe in abort () at /workplace2/cvs/emacs/src/emacs.c:458 > #2 0x080dd8fd in read_char (commandflag=3D1, nmaps=3D5, maps=3D0xbfffbe3= 0, prev_event=3D137388369, used_mouse_menu=3D0xbfffbe84) > at /workplace2/cvs/emacs/src/keyboard.c:2633 > #3 0x080e47ad in read_key_sequence (keybuf=3D0xbfffbf90, bufsize=3D30, p= rompt=3D137388369, dont_downcase_last=3D0, can_return_switch_frame=3D1,=20 > fix_current_buffer=3D1) at /workplace2/cvs/emacs/src/keyboard.c:8872 > #4 0x080dbc80 in command_loop_1 () at /workplace2/cvs/emacs/src/keyboard= .c:1523 > #5 0x081344cd in internal_condition_case (bfun=3D0x80db964 , handlers=3D137449369, hfun=3D0x80db518 ) > at /workplace2/cvs/emacs/src/eval.c:1385 > #6 0x080db7d8 in command_loop_2 () at /workplace2/cvs/emacs/src/keyboard= .c:1304 > #7 0x08134005 in internal_catch (tag=3D137484681, func=3D0x80db7b4 , arg=3D137388369) at /workplace2/cvs/emacs/src/eval.c:1144 > #8 0x080db73d in command_loop () at /workplace2/cvs/emacs/src/keyboard.c= :1271 > #9 0x080db2a4 in recursive_edit_1 () at /workplace2/cvs/emacs/src/keyboa= rd.c:980 > #10 0x080db3e0 in Frecursive_edit () at /workplace2/cvs/emacs/src/keyboar= d.c:1041 > #11 0x08135f05 in Ffuncall (nargs=3D1, args=3D0xbfffc2d0) at /workplace2/= cvs/emacs/src/eval.c:2783 > #12 0x0815b61c in Fbyte_code (bytestr=3D180765107, vector=3D191568892, ma= xdepth=3D32) at /workplace2/cvs/emacs/src/bytecode.c:686 > #13 0x0813556a in Feval (form=3D197747269) at /workplace2/cvs/emacs/src/e= val.c:2138 > #14 0x08133012 in Fprogn (args=3D197747109) at /workplace2/cvs/emacs/src/= eval.c:408 > #15 0x0808b687 in Fsave_window_excursion (args=3D197747109) at /workplace= 2/cvs/emacs/src/window.c:6123 > #16 0x0815ba35 in Fbyte_code (bytestr=3D180765267, vector=3D177288436, ma= xdepth=3D208) at /workplace2/cvs/emacs/src/bytecode.c:835 > #17 0x08136455 in funcall_lambda (fun=3D200312492, nargs=3D2, arg_vector= =3D0xbfffc5a4) at /workplace2/cvs/emacs/src/eval.c:2974 > #18 0x08136016 in Ffuncall (nargs=3D3, args=3D0xbfffc5a0) at /workplace2/= cvs/emacs/src/eval.c:2843 > #19 0x08135909 in Fapply (nargs=3D2, args=3D0xbfffc620) at /workplace2/cv= s/emacs/src/eval.c:2284 > #20 0x08135c11 in apply1 (fn=3D137633761, arg=3D193985885) at /workplace2= /cvs/emacs/src/eval.c:2545 > #21 0x08132e2c in call_debugger (arg=3D193985885) at /workplace2/cvs/emac= s/src/eval.c:265 > #22 0x08134bd5 in find_handler_clause (handlers=3D137449369, conditions= =3D137417789, sig=3D137449393, data=3D137388369, debugger_value_ptr=3D0xbff= fc704) > at /workplace2/cvs/emacs/src/eval.c:1728 > #23 0x0813485c in Fsignal (error_symbol=3D137449393, data=3D137388369) at= /workplace2/cvs/emacs/src/eval.c:1559 > #24 0x0813c8df in Fplist_get (plist=3D137984389, prop=3D137437753) at /wo= rkplace2/cvs/emacs/src/fns.c:1993 > #25 0x0813c9c3 in Fget (symbol=3D137437321, propname=3D137437753) at /wor= kplace2/cvs/emacs/src/fns.c:2038 > #26 0x080ad371 in resolve_face_name (face_name=3D137437321) at /workplace= 2/cvs/emacs/src/xfaces.c:3223 > #27 0x080ad39f in lface_from_face_name (f=3D0xa816d18, face_name=3D137437= 321, signal_p=3D0) at /workplace2/cvs/emacs/src/xfaces.c:3251 > #28 0x080ad412 in get_lface_attributes (f=3D0xa816d18, face_name=3D137437= 321, attrs=3D0xbfffc818, signal_p=3D0) at /workplace2/cvs/emacs/src/xfaces.= c:3284 > #29 0x080ada54 in merge_named_face (f=3D0xa816d18, face_name=3D137437321,= to=3D0xbfffc9a4, named_merge_points=3D0xbfffc810) > at /workplace2/cvs/emacs/src/xfaces.c:3553 > #30 0x080ade7f in merge_face_ref (f=3D0xa816d18, face_ref=3D137437321, to= =3D0xbfffc9a4, err_msgs=3D1, named_merge_points=3D0x0) > at /workplace2/cvs/emacs/src/xfaces.c:3790 > #31 0x080b2db2 in face_at_buffer_position (w=3D0xc1a03d8, pos=3D215, regi= on_beg=3D-1, region_end=3D-1, endptr=3D0xbfffca34, limit=3D315, mouse=3D0) > at /workplace2/cvs/emacs/src/xfaces.c:7578 > #32 0x08061bd3 in handle_face_prop (it=3D0xbfffcdf8) at /workplace2/cvs/e= macs/src/xdisp.c:2968 > #33 0x08061741 in handle_stop (it=3D0xbfffcdf8) at /workplace2/cvs/emacs/= src/xdisp.c:2703 > #34 0x0806476d in reseat (it=3D0xbfffcdf8, pos=3D{charpos =3D 215, bytepo= s =3D 215}, force_p=3D1) at /workplace2/cvs/emacs/src/xdisp.c:4828 > #35 0x080611d7 in init_iterator (it=3D0xbfffcdf8, w=3D0xc1a03d8, charpos= =3D215, bytepos=3D215, row=3D0xc0e6618, base_face_id=3DDEFAULT_FACE_ID) > at /workplace2/cvs/emacs/src/xdisp.c:2378 > #36 0x08061286 in start_display (it=3D0xbfffcdf8, w=3D0xc1a03d8, pos=3D{c= harpos =3D 215, bytepos =3D 215}) at /workplace2/cvs/emacs/src/xdisp.c:2397 > #37 0x0806b59e in redisplay_internal (preserve_echo_area=3D1) at /workpla= ce2/cvs/emacs/src/xdisp.c:10204 > #38 0x0806beab in redisplay_preserve_echo_area (from_where=3D8) at /workp= lace2/cvs/emacs/src/xdisp.c:10649 > #39 0x080e61f8 in detect_input_pending_run_timers (do_display=3D1) at /wo= rkplace2/cvs/emacs/src/keyboard.c:9966 > #40 0x08161c30 in wait_reading_process_output (time_limit=3D30, microsecs= =3D0, read_kbd=3D-1, do_display=3D1, wait_for_cell=3D137388369, wait_proc= =3D0x0,=20 > just_wait_proc=3D0) at /workplace2/cvs/emacs/src/process.c:4451 > #41 0x08056d3b in sit_for (sec=3D30, usec=3D0, reading=3D1, display=3D1, = initial_display=3D0) at /workplace2/cvs/emacs/src/dispnew.c:6393 > #42 0x080ddce1 in read_char (commandflag=3D1, nmaps=3D3, maps=3D0xbfffd5d= 0, prev_event=3D137388369, used_mouse_menu=3D0xbfffd614) > at /workplace2/cvs/emacs/src/keyboard.c:2763 > #43 0x080e47ad in read_key_sequence (keybuf=3D0xbfffd720, bufsize=3D30, p= rompt=3D137388369, dont_downcase_last=3D0, can_return_switch_frame=3D1,=20 > fix_current_buffer=3D1) at /workplace2/cvs/emacs/src/keyboard.c:8872 > #44 0x080dbc80 in command_loop_1 () at /workplace2/cvs/emacs/src/keyboard= .c:1523 > #45 0x081344cd in internal_condition_case (bfun=3D0x80db964 , handlers=3D137449369, hfun=3D0x80db518 ) > at /workplace2/cvs/emacs/src/eval.c:1385 > #46 0x080db7d8 in command_loop_2 () at /workplace2/cvs/emacs/src/keyboard= .c:1304 > #47 0x08134005 in internal_catch (tag=3D137443353, func=3D0x80db7b4 , arg=3D137388369) at /workplace2/cvs/emacs/src/eval.c:1144 > #48 0x080db787 in command_loop () at /workplace2/cvs/emacs/src/keyboard.c= :1283 > #49 0x080db2a4 in recursive_edit_1 () at /workplace2/cvs/emacs/src/keyboa= rd.c:980 > #50 0x080db3e0 in Frecursive_edit () at /workplace2/cvs/emacs/src/keyboar= d.c:1041 > #51 0x080da0ff in main (argc=3D1, argv=3D0xbfffdcf4) at /workplace2/cvs/e= macs/src/emacs.c:1767 > The program is running. Exit anyway? (y or n)=20 =2D-=20 K=C3=A1roly --=-=-=-- --==-=-= Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQBCXLKS6eoyqA+yej8RAmfpAJ9jkVt2NOIyYL+Sry3yPzvU1yIs6gCgjSLr ty7p0P91++on41jOufi4lXs= =D7yw -----END PGP SIGNATURE----- --==-=-=-- --===============1929400334== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ multi-tty mailing list multi-tty@lists.fnord.hu http://lists.fnord.hu/mailman/listinfo/multi-tty --===============1929400334==--