From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Daniel Colascione Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] Unconditional quit on SIGUSR2 Date: Mon, 28 Mar 2011 06:38:39 -0700 Message-ID: <4D908F5F.8000303@gmail.com> References: <4D90354E.9000704@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigC8F42904CEE4B41BCA0BAC34" X-Trace: dough.gmane.org 1301319544 30644 80.91.229.12 (28 Mar 2011 13:39:04 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 28 Mar 2011 13:39:04 +0000 (UTC) Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Mar 28 15:38:59 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Q4Cem-0002dY-O7 for ged-emacs-devel@m.gmane.org; Mon, 28 Mar 2011 15:38:57 +0200 Original-Received: from localhost ([127.0.0.1]:54083 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q4Cel-00071u-T5 for ged-emacs-devel@m.gmane.org; Mon, 28 Mar 2011 09:38:55 -0400 Original-Received: from [140.186.70.92] (port=33422 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q4Ceh-000710-5L for emacs-devel@gnu.org; Mon, 28 Mar 2011 09:38:52 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q4Cef-00046m-Rn for emacs-devel@gnu.org; Mon, 28 Mar 2011 09:38:51 -0400 Original-Received: from mail-iw0-f169.google.com ([209.85.214.169]:41281) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q4Cee-00046Y-3O; Mon, 28 Mar 2011 09:38:48 -0400 Original-Received: by iwg8 with SMTP id 8so4016754iwg.0 for ; Mon, 28 Mar 2011 06:38:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:x-enigmail-version:content-type; bh=gkwVOcEL12hrmF6GAVVmWyTT8LYLK+uh/ATZK7slxso=; b=IiyziRf4sBi233f1vV4J6u7zc3ZtEF+kOi8GqhZB/z3mfgGTXj99UjeChuwGvSO18M 8CnE2kOu668fS+oNQ9FOpsdwJjwtiqNsfHPpWK0F/QWmvAtdFl9OoMzT1lWzMlMIm3wS KhVjh9GUftTGIaDUSx/naTxtHVGSYHNiq2HQk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:x-enigmail-version:content-type; b=BkaKABp2/GL6bf9tfMRLEI6LRGhb+rPTKRFWJJZBRAwMAHYC8u/qYY9cmzK03Gn7WP IY7njMrLL5paBEGTpOMovyH2QD8D9asgIbEpt0Hq1jadV8YMm+thNiLlamMQHdQ98EYu rsChU+aYBsnIyVJfBc169vgSCTBAFupGfwFjo= Original-Received: by 10.231.181.211 with SMTP id bz19mr3569135ibb.107.1301319527517; Mon, 28 Mar 2011 06:38:47 -0700 (PDT) Original-Received: from [192.168.1.2] (c-67-183-23-114.hsd1.wa.comcast.net [67.183.23.114]) by mx.google.com with ESMTPS id mv26sm2961748ibb.28.2011.03.28.06.38.44 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 28 Mar 2011 06:38:45 -0700 (PDT) User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.15) Gecko/20110303 Thunderbird/3.1.9 In-Reply-To: X-Enigmail-Version: 1.1.1 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.214.169 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:137775 Archived-At: This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigC8F42904CEE4B41BCA0BAC34 Content-Type: multipart/mixed; boundary="------------030405060300010300000208" This is a multi-part message in MIME format. --------------030405060300010300000208 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 3/28/11 4:48 AM, Eli Zaretskii wrote: >> Date: Mon, 28 Mar 2011 00:14:22 -0700 >> From: Daniel Colascione >> >> Sometimes Emacs gets stuck in places where quitting is suppressed, >> such as during redisplay. For most users, the only way to deal with >> this situation is to abruptly terminate Emacs. >> >> This patch allows users to recover from this situation by sending Emac= s >> a SIGUSR2 signal. When we receive it, we set debug-on-quit to t, >> inhibit-quit to nil, and quit-flag to t. These operations will force >> Emacs to stop at the next possible opportunity and display a backtrace= =2E >> From here, users can save their work, and developers can figure out >> what caused the hang. >=20 > If the goal is to provide a way for the user to interrupt a stuck > Emacs in a way that allows to save edits or debug Emacs, then users > can already send SIGTERM and developers can already attach a debugger, > and that will achieve the same result. Why do we need a new machinery > to do something that is already possible via essentially the same > sequence of actions, i.e. type "kill EMACS-PID" at the shell prompt? >=20 > Or am I missing something? Killing Emacs destroys any transient state. The last-resort-quit approach doesn't. Attaching a debugger is well and good, but one isn't always available, and even if one is, symbols for Emacs aren't always on the system, as is the case for a typical Emacs distribution package. Providing this facility (which does nothing unless you use it) can let users recover work and provide more detailed bug reports, as well as help us ferret out the cause of hard-to-reproduce lockups in font-lock code without having to run under a debugger all the time. > I'm asking because I think redisplay > cannot be interrupted like that: it never checks the quit flag, and > for a good reason AFAIK -- you cannot interrupt it at an arbitrary > point without disastrous consequences. Of course we can't quit just anywhere. All the king's horses and all the king's men couldn't safely break Emacs out of arbitrary C code --- but we don't have to: the idea is to be able to quit in reasonable places, e.g. where could insert a (debug) in Lisp. This way, we can hope to interrupt runaway font-lock code, and for this application, my proposed approach does indeed work. If I could have implemented this feature without introducing additional machinery, I would have. If you're modifying the core redisplay code and introduce a hang, you probably have a debugger available. OTOH, it's perfectly reasonable to tweak font-lock code without one. I've attached a new version of my patch that changes the action name from "quit" to "debug" instead of "quit" to reflect what we actually do. I've also made the code attempt to regain control in another way. This version successfully breaks out of font-lock code running during redisplay when C-g does not. --------------030405060300010300000208 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="debugsig.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="debugsig.patch" PT09IG1vZGlmaWVkIGZpbGUgJ2RvYy9lbWFjcy90cm91YmxlLnRleGknCi0tLSBkb2MvZW1h Y3MvdHJvdWJsZS50ZXhpCTIwMTEtMDEtMjUgMDQ6MDg6MjggKzAwMDAKKysrIGRvYy9lbWFj cy90cm91YmxlLnRleGkJMjAxMS0wMy0yOCAxMzowNDo0OSArMDAwMApAQCAtODEyLDYgKzgx MiwxNSBAQAogVGhpcyBiYWNrdHJhY2UgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgc3VjaCBs b25nIGxvb3BzLCBzbyBpZiB5b3UgY2FuCiBwcm9kdWNlIGl0LCBjb3B5IGl0IGludG8gdGhl IGJ1ZyByZXBvcnQuCiAKK0B2aW5kZXggc2lndXNyMi1hY3Rpb24KK0lmIG5vcm1hbCBxdWl0 dGluZyBkb2VzIG5vdGhpbmcgYW5kIHlvdSBhcmUgdXNpbmcgYSBzeXN0ZW0gdGhhdAorc3Vw cG9ydHMgc2lnbmFscywgdGhlbiBhcyBhIGxhc3QgcmVzb3J0LCB5b3UgY2FuIHRyeSBzZW5k aW5nIEVtYWNzIHRoZQorU0lHVVNSMiBzaWduYWwuICBXaGVuIEVtYWNzIHJlY2VpdmVzIHRo aXMgc2lnbmFsLCBpdCBjaGVja3Mgd2hldGhlcgorQGNvZGV7c2lndXNyMi1hY3Rpb259IGlz IGVxdWFsIHRvIEBjb2Rle2RlYnVnfS4gIElmIHNvLCBFbWFjcyBzdG9wcword2hhdCBpdCdz IGRvaW5nLCBzZXRzIEBjb2Rle2RlYnVnLW9uLXF1aXR9IHRvIEBjb2Rle3R9LCBhbmQgdHJp ZXMgdG8KK2JyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGluIGEgdmFyaWV0eSBvZiB3YXlzLiAg VGhpcyBwcm9jZXNzIGhhcHBlbnMKK2V2ZW4gaW4gcGxhY2VzIHdoZXJlIHF1aXR0aW5nIGlz IG5vcm1hbGx5IG5vdCBhbGxvd2VkLgorCiBAaXRlbQogQ2hlY2sgd2hldGhlciBhbnkgcHJv Z3JhbXMgeW91IGhhdmUgbG9hZGVkIGludG8gdGhlIExpc3Agd29ybGQsCiBpbmNsdWRpbmcg eW91ciBAZmlsZXsuZW1hY3N9IGZpbGUsIHNldCBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFm ZmVjdCB0aGUKCj09PSBtb2RpZmllZCBmaWxlICdkb2MvbGlzcHJlZi9kZWJ1Z2dpbmcudGV4 aScKLS0tIGRvYy9saXNwcmVmL2RlYnVnZ2luZy50ZXhpCTIwMTEtMDEtMjUgMDQ6MDg6Mjgg KzAwMDAKKysrIGRvYy9saXNwcmVmL2RlYnVnZ2luZy50ZXhpCTIwMTEtMDMtMjggMTM6MDY6 MjUgKzAwMDAKQEAgLTE4NSw2ICsxODUsMTkgQEAKIHdoZW4geW91IHF1aXQuICBAeHJlZntR dWl0dGluZ30uCiBAZW5kIGRlZm9wdAogCitAZGVmb3B0IHNpZ3VzcjItYWN0aW9uCitPbiBz eXN0ZW1zIHdpdGggc2lnbmFsIHN1cHBvcnQsIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3 aGF0IGhhcHBlbnMKK3doZW4gRW1hY3MgcmVjZWl2ZXMgU0lHVVNSMi4gIFdoZW4gaXRzIHZh bHVlIGlzIEBjb2Rle2RlYnVnfSwgRW1hY3MKK3dpbGwgYXR0ZW1wdCB0byBicmVhayBpbnRv IHRoZSBMaXNwIGRlYnVnZ2VyIGluIGEgdmFyaWV0eSBvZiB3YXlzLAorc2V0dGluZyBAY29k ZXtkZWJ1Zy1vbi1xdWl0fSB0byBAY29kZXt0fSBhcyBhIHNpZGUgZWZmZWN0LgorCitXaGVu IEBjb2Rle3NpZ3VzcjItYWN0aW9ufSBoYXMgYW55IG90aGVyIHZhbHVlLCBFbWFjcyB3aWxs IGhhbmRsZSB0aGUKK3NpZ25hbCBhcyBzcGVjaWZpZWQgaW4gQGNvZGV7c3BlY2lhbC1ldmVu dC1tYXB9IChAcHhyZWZ7QWN0aXZlCitLZXltYXBzfSkuICBUaGlzIGZlYXR1cmUgaXMgdXNl ZnVsIGZvciB0ZXJtaW5hdGluZyBpbmZpbml0ZSBsb29wcyBpbgorcGxhY2VzIHdoZXJlIHF1 aXRzIHdvdWxkIG5vcm1hbGx5IGJlIGlnbm9yZWQsIHN1Y2ggYXMgaW4gY29kZSB0aGF0City dW5zIGR1cmluZyByZWRpc3BsYXkuCitAZW5kIGRlZm9wdAorCiBAbm9kZSBGdW5jdGlvbiBE ZWJ1Z2dpbmcKIEBzdWJzZWN0aW9uIEVudGVyaW5nIHRoZSBEZWJ1Z2dlciBvbiBhIEZ1bmN0 aW9uIENhbGwKIEBjaW5kZXggZnVuY3Rpb24gY2FsbCBkZWJ1Z2dpbmcKCj09PSBtb2RpZmll ZCBmaWxlICdsaXNwL2N1cy1zdGFydC5lbCcKLS0tIGxpc3AvY3VzLXN0YXJ0LmVsCTIwMTEt MDMtMjcgMTA6NTU6MDcgKzAwMDAKKysrIGxpc3AvY3VzLXN0YXJ0LmVsCTIwMTEtMDMtMjgg MTM6MTI6MzAgKzAwMDAKQEAgLTI1OSw2ICsyNTksMTAgQEAKIAkgICAgIChzdWdnZXN0LWtl eS1iaW5kaW5ncyBrZXlib2FyZCAoY2hvaWNlIChjb25zdCA6dGFnICJvZmYiIG5pbCkKIAkJ CQkJCSAgICAoaW50ZWdlciA6dGFnICJ0aW1lIiAyKQogCQkJCQkJICAgIChvdGhlciA6dGFn ICJvbiIpKSkKKyAgICAgICAgICAgICAoc2lndXNyMi1hY3Rpb24gZGVidWcKKwkJCSAgICAo Y2hvaWNlIChjb25zdCA6dGFnICJIYW5kbGUgU0lHVVNSMiBub3JtYWxseSIpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiUXVpdCBvbiBTSUdV U1IyIiBkZWJ1ZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjI0LjEiKQogCiA7 OyBUaGlzIGlzIG5vdCBnb29kIG5ld3MgYmVjYXVzZSBpdCB3aWxsIHVzZSB0aGUgd3JvbmcK IDs7IHZlcnNpb24tc3BlY2lmaWMgZGlyZWN0b3JpZXMgd2hlbiB5b3UgdXBncmFkZS4gIFdl IG5lZWQKCj09PSBtb2RpZmllZCBmaWxlICdzcmMva2V5Ym9hcmQuYycKLS0tIHNyYy9rZXli b2FyZC5jCTIwMTEtMDMtMjcgMDI6Mjc6MTEgKzAwMDAKKysrIHNyYy9rZXlib2FyZC5jCTIw MTEtMDMtMjggMTM6MTE6NDggKzAwMDAKQEAgLTcxNjgsNiArNzE2OCwyMiBAQAogCiAgIFNJ R05BTF9USFJFQURfQ0hFQ0sgKHNpZyk7CiAKKyNpZmRlZiBTSUdVU1IyCisgIGlmIChzaWcg PT0gU0lHVVNSMikKKyAgICB7CisgICAgICAvKiBXZSBjYW4gYmUgY2FsbGVkIGF0IGFueSB0 aW1lLCBidXQgYmVjYXVzZSB2YXJpYWJsZSBhc3NpZ25tZW50CisgICAgICAgICBpcyBhdG9t aWMsIGFueSByYWNlcyBhcmUgaGFybWxlc3MuICAqLworICAgICAgaWYgKFZzaWd1c3IyX2Fj dGlvbiA9PSBRZGVidWcpCisgICAgICAgIHsKKyAgICAgICAgICBkZWJ1Z19vbl9uZXh0X2Nh bGwgPSAxOworICAgICAgICAgIGRlYnVnX29uX3F1aXQgPSAxOworICAgICAgICAgIFZxdWl0 X2ZsYWcgPSBRdDsKKyAgICAgICAgICBWaW5oaWJpdF9xdWl0ID0gUW5pbDsKKyAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogU0lHVVNSMiAqLworCiAg IGZvciAocCA9IHVzZXJfc2lnbmFsczsgcDsgcCA9IHAtPm5leHQpCiAgICAgaWYgKHAtPnNp ZyA9PSBzaWcpCiAgICAgICB7CkBAIC0xMTM1Niw2ICsxMTM3MiwxMCBAQAogICBwb2xsX3N1 cHByZXNzX2NvdW50ID0gMTsKICAgc3RhcnRfcG9sbGluZyAoKTsKICNlbmRpZgorCisjaWZk ZWYgU0lHVVNSMgorICBWc2lndXNyMl9hY3Rpb24gPSBRZGVidWc7CisjZW5kaWYKIH0KIAog LyogVGhpcyB0eXBlJ3Mgb25seSB1c2UgaXMgaW4gc3ltc19vZl9rZXlib2FyZCwgdG8gaW5p dGlhbGl6ZSB0aGUKQEAgLTEyMTc4LDYgKzEyMTk4LDE5IEBACiBgZGVhY3RpdmF0ZS1tYXJr JyBjYWxsIHVzZXMgdGhpcyB0byBzZXQgdGhlIHdpbmRvdyBzZWxlY3Rpb24uICAqLyk7CiAg IFZzYXZlZF9yZWdpb25fc2VsZWN0aW9uID0gUW5pbDsKIAorI2lmZGVmIFNJR1VTUjIKKyAg REVGVkFSX0xJU1AgKCJzaWd1c3IyLWFjdGlvbiIsCisgICAgICAgICAgICAgICBWc2lndXNy Ml9hY3Rpb24sCisgICAgICAgICAgICAgICBkb2M6IC8qIENvbnRyb2xzIHdoYXQgRW1hY3Mg ZG9lcyB3aGVuIGl0IHJlY2VpdmVzIGEKK1NJR1VTUjIuICBJZiAncXVpdCwgc2V0IGBpbmhp Yml0LXF1aXQnIHRvIG5pbCBhbmQgYHF1aXQtZmxhZycgdG8gdCwKK3F1aXR0aW5nIHVuY29u ZGl0aW9uYWxseSBhdCB0aGUgbmV4dCBvcHBvcnR1bml0eS4gQW55IG90aGVyIHZhbHVlCitj YXVzZXMgbm90aGluZyB0byBiZSBkb25lLgorCitJbiBhbGwgY2FzZXMsIEVtYWNzIGdlbmVy YXRlcyBhIGBzaWd1c3IyJyBldmVudCBhcyBpdCBub3JtYWxseQord291bGQuIFNlZSBgc3Bl Y2lhbC1ldmVudC1tYXAnLiAgKi8pOworICBWc2lndXNyMl9hY3Rpb24gPSBRbmlsOworI2Vu ZGlmCisKICAgLyogQ3JlYXRlIHRoZSBpbml0aWFsIGtleWJvYXJkLiAqLwogICBpbml0aWFs X2tib2FyZCA9IChLQk9BUkQgKikgeG1hbGxvYyAoc2l6ZW9mIChLQk9BUkQpKTsKICAgaW5p dF9rYm9hcmQgKGluaXRpYWxfa2JvYXJkKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlz cC5oJwotLS0gc3JjL2xpc3AuaAkyMDExLTAzLTI3IDAyOjI3OjExICswMDAwCisrKyBzcmMv bGlzcC5oCTIwMTEtMDMtMjggMTM6MDY6NDEgKzAwMDAKQEAgLTI4MTQsNyArMjgxNCw3IEBA CiAKIC8qIERlZmluZWQgaW4gZXZhbC5jICovCiBleHRlcm4gTGlzcF9PYmplY3QgUWF1dG9s b2FkLCBRZXhpdCwgUWludGVyYWN0aXZlLCBRY29tbWFuZHAsIFFkZWZ1biwgUW1hY3JvOwot ZXh0ZXJuIExpc3BfT2JqZWN0IFFpbmhpYml0X3F1aXQ7CitleHRlcm4gTGlzcF9PYmplY3Qg UWluaGliaXRfcXVpdCwgUWRlYnVnOwogZXh0ZXJuIExpc3BfT2JqZWN0IFZhdXRvbG9hZF9x dWV1ZTsKIGV4dGVybiBMaXNwX09iamVjdCBWc2lnbmFsaW5nX2Z1bmN0aW9uOwogZXh0ZXJu IGludCBoYW5kbGluZ19zaWduYWw7Cgo= --------------030405060300010300000208-- --------------enigC8F42904CEE4B41BCA0BAC34 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (Darwin) iEYEARECAAYFAk2Qj2MACgkQ17c2LVA10VtN/QCfextS3apnJjXjS1Mpo+zGnF4u mZIAoOKizY6xuXT/IhmG3U8T4vi4OvCJ =BSQ6 -----END PGP SIGNATURE----- --------------enigC8F42904CEE4B41BCA0BAC34--