GNU bug report logs - #13743
24.2.93; Segmentation fault when trying to [s]teal a file opened elsewhere

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dgutov <at> yandex.ru>

Date: Mon, 18 Feb 2013 07:14:01 UTC

Severity: important

Found in version 24.2.93

Done: Dmitry Gutov <dgutov <at> yandex.ru>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 13743 in the body.
You can then email your comments to 13743 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 18 Feb 2013 07:14:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Dmitry Gutov <dgutov <at> yandex.ru>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 18 Feb 2013 07:14:03 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 18 Feb 2013 10:41:31 +0400
Emacs reliably crashes when [s]tealing a file that's opened in another
instance. I can only reproduce this when the buffer opens in mmm-mode
(so the bug may be related to indirect buffers), and apparently mmm-mode
modifies the buffer in some way automatically, so the prompt to
steal/proceed/quit is shown as soon as I open the file.

I think this is the first situation I've seen Emacs crash, in quite a
while.


(gdb) xbacktrace
"put-text-property" (0xffff9a20)
"jit-lock-refontify" (0xffff9c00)
"jit-lock-mode" (0xffff9e00)
"jit-lock-register" (0xffff9fd0)
"font-lock-turn-on-thing-lock" (0xffffa1b0)
"font-lock-mode-internal" (0xffffa380)
"font-lock-default-function" (0xffffa550)
"font-lock-mode" (0xffffa720)
"turn-on-font-lock" (0xffffa8d0)
"turn-on-font-lock-if-desired" (0xffffaa90)
"global-font-lock-mode-enable-in-buffers" (0xffffaca8)
"run-hooks" (0xffffad68)
"apply" (0xffffaec0)
"run-mode-hooks" (0xffffaff0)
"html-erb-mode" (0xffffb2a8)
"funcall" (0xffffb2a0)
"save-current-buffer" (0xffffb418)
"unwind-protect" (0xffffb538)
"let" (0xffffb6d8)
"if" (0xffffb7e8)
"let" (0xffffb9a8)
"mmm-update-mode-info" (0xffffbaf0)
"if" (0xffffbcc8)
---Type <return> to continue, or q <return> to quit---
"if" (0xffffbdd8)
"mmm-mode-on" (0xffffbf20)
"cond" (0xffffc0e8)
"mmm-mode-on-maybe" (0xffffc2d8)
"funcall" (0xffffc2d0)
"progn" (0xffffc428)
"condition-case" (0xffffc6a8)
"while" (0xffffc7d8)
"let" (0xffffc978)
"progn" (0xffffca88)
"mmm-run-major-mode-hook" (0xffffcbd0)
"save-current-buffer" (0xffffcdb8)
"progn" (0xffffcec8)
"if" (0xffffcfc8)
"while" (0xffffd0f8)
"let" (0xffffd298)
"progn" (0xffffd3a8)
"mmm-check-changed-buffers" (0xffffd590)
(gdb)

===

bt full is too long for my terminal, so here's the top. Let me know if
it's not enough, I'll try to increase the history limit or whatever.

(gdb) bt full
#0  add_properties (plist=plist <at> entry=31577430, i=i <at> entry=0x0, 
    object=object <at> entry=12438597) at textprop.c:378
        tail1 = 31577430
        tail2 = <optimized out>
        sym1 = 12306530
        val1 = 12067362
        changed = <optimized out>
        found = 0
#1  0x00000000005a4fb3 in Fadd_text_properties (start=start <at> entry=4, 
    end=end <at> entry=3068, properties=31577430, object=12438597, 
    object <at> entry=12067362) at textprop.c:1212
        i = 0x0
        unchanged = <optimized out>
        s = <optimized out>
        len = 558
        modified = 19
#2  0x00000000005a52bf in Fput_text_property (start=4, end=3068, 
    property=12306530, value=<optimized out>, object=12067362)
    at textprop.c:1229
No locals.
#3  0x000000000055490f in Ffuncall (nargs=<optimized out>, 
    args=<optimized out>) at eval.c:2794
        fun = 11445941
---Type <return> to continue, or q <return> to quit---
        original_fun = <optimized out>
        funcar = <optimized out>
        numargs = <optimized out>
        lisp_numargs = <optimized out>
        val = <optimized out>
        backtrace = {
          next = 0x7fffffff9b80, 
          function = 12254514, 
          args = 0x7fffffff9a20, 
          nargs = 4, 
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff9950
        i = <optimized out>
#4  0x000000000058a1e3 in exec_byte_code (bytestr=31577446, vector=37, 
    maxdepth=5, args_template=4611686018695757824, nargs=4611686018430533632, 
    args=0x7fffffff9568, args <at> entry=0x0) at bytecode.c:900
        targets = {0x58a2f8 <exec_byte_code+1032>, 
          0x58c311 <exec_byte_code+9249>, 0x58c3b3 <exec_byte_code+9411>, 
          0x58bf7a <exec_byte_code+8330>, 0x58a24a <exec_byte_code+858>, 
          0x58a24a <exec_byte_code+858>, 0x58bf7f <exec_byte_code+8335>, 
          0x58bfc0 <exec_byte_code+8400>, 0x58bf35 <exec_byte_code+8261>, 
          0x58bf3a <exec_byte_code+8266>, 0x58bf3f <exec_byte_code+8271>, 
---Type <return> to continue, or q <return> to quit---
          0x58bf45 <exec_byte_code+8277>, 0x58a0d2 <exec_byte_code+482>, 
          0x58a0d8 <exec_byte_code+488>, 0x58a332 <exec_byte_code+1090>, 
          0x58bf55 <exec_byte_code+8293>, 0x58a4b0 <exec_byte_code+1472>, 
          0x58a4b5 <exec_byte_code+1477>, 0x58a4ba <exec_byte_code+1482>, 
          0x58a4c5 <exec_byte_code+1493>, 0x58a126 <exec_byte_code+566>, 
          0x58a130 <exec_byte_code+576>, 0x58a4fa <exec_byte_code+1546>, 
          0x58a4d5 <exec_byte_code+1509>, 0x58a570 <exec_byte_code+1664>, 
          0x58a575 <exec_byte_code+1669>, 0x58a57a <exec_byte_code+1674>, 
          0x58a585 <exec_byte_code+1685>, 0x58a18a <exec_byte_code+666>, 
          0x58a190 <exec_byte_code+672>, 0x58a537 <exec_byte_code+1607>, 
          0x58a54b <exec_byte_code+1627>, 0x58a5ce <exec_byte_code+1758>, 
          0x58a5d3 <exec_byte_code+1763>, 0x58a5d8 <exec_byte_code+1768>, 
          0x58a5e5 <exec_byte_code+1781>, 0x58a1c3 <exec_byte_code+723>, 
          0x58a1c8 <exec_byte_code+728>, 0x58a595 <exec_byte_code+1701>, 
          0x58a5a9 <exec_byte_code+1721>, 0x58a62e <exec_byte_code+1854>, 
          0x58a633 <exec_byte_code+1859>, 0x58a638 <exec_byte_code+1864>, 
          0x58a645 <exec_byte_code+1877>, 0x58a203 <exec_byte_code+787>, 
          0x58a208 <exec_byte_code+792>, 0x58a5f5 <exec_byte_code+1797>, 
          0x58a609 <exec_byte_code+1817>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58ae64 <exec_byte_code+3956>, 
---Type <return> to continue, or q <return> to quit---
          0x58aef0 <exec_byte_code+4096>, 0x58af29 <exec_byte_code+4153>, 
          0x58af62 <exec_byte_code+4210>, 0x58af9b <exec_byte_code+4267>, 
          0x58a400 <exec_byte_code+1296>, 0x58a43d <exec_byte_code+1357>, 
          0x58afde <exec_byte_code+4334>, 0x58a3c4 <exec_byte_code+1236>, 
          0x58a474 <exec_byte_code+1412>, 0x58b011 <exec_byte_code+4385>, 
          0x58b048 <exec_byte_code+4440>, 0x58b078 <exec_byte_code+4488>, 
          0x58b0be <exec_byte_code+4558>, 0x58b0f4 <exec_byte_code+4612>, 
          0x58b16c <exec_byte_code+4732>, 0x58b195 <exec_byte_code+4773>, 
          0x58b1cc <exec_byte_code+4828>, 0x58b208 <exec_byte_code+4888>, 
          0x58b231 <exec_byte_code+4929>, 0x58b25a <exec_byte_code+4970>, 
          0x58b291 <exec_byte_code+5025>, 0x58b2c8 <exec_byte_code+5080>, 
          0x58b2ff <exec_byte_code+5135>, 0x58b33b <exec_byte_code+5195>, 
          0x58b371 <exec_byte_code+5249>, 0x58b3a7 <exec_byte_code+5303>, 
          0x58b41f <exec_byte_code+5423>, 0x58b459 <exec_byte_code+5481>, 
          0x58b493 <exec_byte_code+5539>, 0x58b51f <exec_byte_code+5679>, 
          0x58b556 <exec_byte_code+5734>, 0x58b58d <exec_byte_code+5789>, 
          0x58b5c4 <exec_byte_code+5844>, 0x58b5fb <exec_byte_code+5899>, 
          0x58b631 <exec_byte_code+5953>, 0x58b664 <exec_byte_code+6004>, 
          0x58b69a <exec_byte_code+6058>, 0x58b6d0 <exec_byte_code+6112>, 
          0x58b706 <exec_byte_code+6166>, 0x58b7a9 <exec_byte_code+6329>, 
          0x58a304 <exec_byte_code+1044>, 0x58b7e0 <exec_byte_code+6384>, 
          0x58b809 <exec_byte_code+6425>, 0x58b878 <exec_byte_code+6536>, 
          0x58b8af <exec_byte_code+6591>, 0x58b8e6 <exec_byte_code+6646>, 
---Type <return> to continue, or q <return> to quit---
          0x58b90f <exec_byte_code+6687>, 0x58b939 <exec_byte_code+6729>, 
          0x58b963 <exec_byte_code+6771>, 0x58b991 <exec_byte_code+6817>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58b9c1 <exec_byte_code+6865>, 
          0x58b9ef <exec_byte_code+6911>, 0x58ba1d <exec_byte_code+6957>, 
          0x58ba4b <exec_byte_code+7003>, 0x58ba79 <exec_byte_code+7049>, 
          0x58baa7 <exec_byte_code+7095>, 0x58a304 <exec_byte_code+1044>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58bad0 <exec_byte_code+7136>, 
          0x58bafe <exec_byte_code+7182>, 0x58bb27 <exec_byte_code+7223>, 
          0x58bb50 <exec_byte_code+7264>, 0x58bb87 <exec_byte_code+7319>, 
          0x58bbbe <exec_byte_code+7374>, 0x58bbe7 <exec_byte_code+7415>, 
          0x58bcb4 <exec_byte_code+7620>, 0x58be70 <exec_byte_code+8064>, 
          0x58bea7 <exec_byte_code+8119>, 0x58bede <exec_byte_code+8174>, 
          0x58bf0c <exec_byte_code+8220>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a84e <exec_byte_code+2398>, 0x58a681 <exec_byte_code+1937>, 
          0x58a346 <exec_byte_code+1110>, 0x58a71d <exec_byte_code+2093>, 
          0x58a7d3 <exec_byte_code+2275>, 0x58a9bc <exec_byte_code+2764>, 
          0x58ad13 <exec_byte_code+3619>, 0x58ad67 <exec_byte_code+3703>, 
          0x58a50e <exec_byte_code+1566>, 0x58a897 <exec_byte_code+2471>, 
          0x58a8c5 <exec_byte_code+2517>, 0x58a924 <exec_byte_code+2612>, 
          0x58a952 <exec_byte_code+2658>, 0x58a98e <exec_byte_code+2718>, 
          0x58ad87 <exec_byte_code+3735>, 0x58adc3 <exec_byte_code+3795>, 
          0x58ae06 <exec_byte_code+3862>, 0x58a655 <exec_byte_code+1893>, 
          0x58bceb <exec_byte_code+7675>, 0x58bd27 <exec_byte_code+7735>, 
---Type <return> to continue, or q <return> to quit---
          0x58bd50 <exec_byte_code+7776>, 0x58bd79 <exec_byte_code+7817>, 
          0x58bda2 <exec_byte_code+7858>, 0x58bdcb <exec_byte_code+7899>, 
          0x58be02 <exec_byte_code+7954>, 0x58be39 <exec_byte_code+8009>, 
          0x58c11b <exec_byte_code+8747>, 0x58c152 <exec_byte_code+8802>, 
          0x58c198 <exec_byte_code+8872>, 0x58c1cf <exec_byte_code+8927>, 
          0x58c206 <exec_byte_code+8982>, 0x58c22f <exec_byte_code+9023>, 
          0x58c266 <exec_byte_code+9078>, 0x58c29d <exec_byte_code+9133>, 
          0x58c2d7 <exec_byte_code+9191>, 0x58c37d <exec_byte_code+9357>, 
          0x58b73c <exec_byte_code+6220>, 0x58b772 <exec_byte_code+6274>, 
          0x58c316 <exec_byte_code+9254>, 0x58c349 <exec_byte_code+9305>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58aa6f <exec_byte_code+2943>, 
          0x58aaf8 <exec_byte_code+3080>, 0x58ab67 <exec_byte_code+3191>, 
          0x58ac06 <exec_byte_code+3350>, 0x58ac76 <exec_byte_code+3462>, 
          0x58b12a <exec_byte_code+4666>, 0x58b3dd <exec_byte_code+5357>, 
          0x58b836 <exec_byte_code+6470>, 0x58c014 <exec_byte_code+8484>, 
          0x58c054 <exec_byte_code+8548>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58c0a7 <exec_byte_code+8631>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 
          0x58c0ee <exec_byte_code+8702> <repeats 64 times>}
---Type <return> to continue, or q <return> to quit---
        stack = {
          pc = 0xa6e13b <pure+2363995> ".\n\207", 
          byte_string = 9883225, 
          byte_string_start = 0xa6e113 <pure+2363955> "\306\030\307 \031\032\033\306\034\035\036\f\310\036\r\214~\210\312\016\016\206\037", 
          constants = 9883261, 
          next = 0x7fffffff9c80
        }
        result = 12067362
#5  0x0000000000554491 in funcall_lambda (fun=9883173, nargs=nargs <at> entry=0, 
    arg_vector=arg_vector <at> entry=0x7fffffff9c00) at eval.c:3010
        val = <optimized out>
        syms_left = 12067362
        next = <optimized out>
        lexenv = 12067362
        count = 32
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#6  0x00000000005547bb in Ffuncall (nargs=1, args=0x7fffffff9bf8)
    at eval.c:2839
        fun = <optimized out>
        original_fun = 19797250
---Type <return> to continue, or q <return> to quit---
        funcar = <optimized out>
        numargs = 0
        lisp_numargs = <optimized out>
        val = <optimized out>
        backtrace = {
          next = 0x7fffffff9d80, 
          function = 19797250, 
          args = 0x7fffffff9c00, 
          nargs = 0, 
          debug_on_exit = 0
        }
        internal_args = <optimized out>
        i = <optimized out>
#7  0x000000000058a1e3 in exec_byte_code (bytestr=31577446, vector=106, 
    maxdepth=5, args_template=4611686018695757824, nargs=4611686018430533632, 
    args=0x7fffffff9568, args <at> entry=0x0) at bytecode.c:900
        targets = {0x58a2f8 <exec_byte_code+1032>, 
          0x58c311 <exec_byte_code+9249>, 0x58c3b3 <exec_byte_code+9411>, 
          0x58bf7a <exec_byte_code+8330>, 0x58a24a <exec_byte_code+858>, 
          0x58a24a <exec_byte_code+858>, 0x58bf7f <exec_byte_code+8335>, 
          0x58bfc0 <exec_byte_code+8400>, 0x58bf35 <exec_byte_code+8261>, 
          0x58bf3a <exec_byte_code+8266>, 0x58bf3f <exec_byte_code+8271>, 
          0x58bf45 <exec_byte_code+8277>, 0x58a0d2 <exec_byte_code+482>, 
---Type <return> to continue, or q <return> to quit---
          0x58a0d8 <exec_byte_code+488>, 0x58a332 <exec_byte_code+1090>, 
          0x58bf55 <exec_byte_code+8293>, 0x58a4b0 <exec_byte_code+1472>, 
          0x58a4b5 <exec_byte_code+1477>, 0x58a4ba <exec_byte_code+1482>, 
          0x58a4c5 <exec_byte_code+1493>, 0x58a126 <exec_byte_code+566>, 
          0x58a130 <exec_byte_code+576>, 0x58a4fa <exec_byte_code+1546>, 
          0x58a4d5 <exec_byte_code+1509>, 0x58a570 <exec_byte_code+1664>, 
          0x58a575 <exec_byte_code+1669>, 0x58a57a <exec_byte_code+1674>, 
          0x58a585 <exec_byte_code+1685>, 0x58a18a <exec_byte_code+666>, 
          0x58a190 <exec_byte_code+672>, 0x58a537 <exec_byte_code+1607>, 
          0x58a54b <exec_byte_code+1627>, 0x58a5ce <exec_byte_code+1758>, 
          0x58a5d3 <exec_byte_code+1763>, 0x58a5d8 <exec_byte_code+1768>, 
          0x58a5e5 <exec_byte_code+1781>, 0x58a1c3 <exec_byte_code+723>, 
          0x58a1c8 <exec_byte_code+728>, 0x58a595 <exec_byte_code+1701>, 
          0x58a5a9 <exec_byte_code+1721>, 0x58a62e <exec_byte_code+1854>, 
          0x58a633 <exec_byte_code+1859>, 0x58a638 <exec_byte_code+1864>, 
          0x58a645 <exec_byte_code+1877>, 0x58a203 <exec_byte_code+787>, 
          0x58a208 <exec_byte_code+792>, 0x58a5f5 <exec_byte_code+1797>, 
          0x58a609 <exec_byte_code+1817>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58ae64 <exec_byte_code+3956>, 
          0x58aef0 <exec_byte_code+4096>, 0x58af29 <exec_byte_code+4153>, 
---Type <return> to continue, or q <return> to quit---
          0x58af62 <exec_byte_code+4210>, 0x58af9b <exec_byte_code+4267>, 
          0x58a400 <exec_byte_code+1296>, 0x58a43d <exec_byte_code+1357>, 
          0x58afde <exec_byte_code+4334>, 0x58a3c4 <exec_byte_code+1236>, 
          0x58a474 <exec_byte_code+1412>, 0x58b011 <exec_byte_code+4385>, 
          0x58b048 <exec_byte_code+4440>, 0x58b078 <exec_byte_code+4488>, 
          0x58b0be <exec_byte_code+4558>, 0x58b0f4 <exec_byte_code+4612>, 
          0x58b16c <exec_byte_code+4732>, 0x58b195 <exec_byte_code+4773>, 
          0x58b1cc <exec_byte_code+4828>, 0x58b208 <exec_byte_code+4888>, 
          0x58b231 <exec_byte_code+4929>, 0x58b25a <exec_byte_code+4970>, 
          0x58b291 <exec_byte_code+5025>, 0x58b2c8 <exec_byte_code+5080>, 
          0x58b2ff <exec_byte_code+5135>, 0x58b33b <exec_byte_code+5195>, 
          0x58b371 <exec_byte_code+5249>, 0x58b3a7 <exec_byte_code+5303>, 
          0x58b41f <exec_byte_code+5423>, 0x58b459 <exec_byte_code+5481>, 
          0x58b493 <exec_byte_code+5539>, 0x58b51f <exec_byte_code+5679>, 
          0x58b556 <exec_byte_code+5734>, 0x58b58d <exec_byte_code+5789>, 
          0x58b5c4 <exec_byte_code+5844>, 0x58b5fb <exec_byte_code+5899>, 
          0x58b631 <exec_byte_code+5953>, 0x58b664 <exec_byte_code+6004>, 
          0x58b69a <exec_byte_code+6058>, 0x58b6d0 <exec_byte_code+6112>, 
          0x58b706 <exec_byte_code+6166>, 0x58b7a9 <exec_byte_code+6329>, 
          0x58a304 <exec_byte_code+1044>, 0x58b7e0 <exec_byte_code+6384>, 
          0x58b809 <exec_byte_code+6425>, 0x58b878 <exec_byte_code+6536>, 
          0x58b8af <exec_byte_code+6591>, 0x58b8e6 <exec_byte_code+6646>, 
          0x58b90f <exec_byte_code+6687>, 0x58b939 <exec_byte_code+6729>, 
---Type <return> to continue, or q <return> to quit---
          0x58b963 <exec_byte_code+6771>, 0x58b991 <exec_byte_code+6817>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58b9c1 <exec_byte_code+6865>, 
          0x58b9ef <exec_byte_code+6911>, 0x58ba1d <exec_byte_code+6957>, 
          0x58ba4b <exec_byte_code+7003>, 0x58ba79 <exec_byte_code+7049>, 
          0x58baa7 <exec_byte_code+7095>, 0x58a304 <exec_byte_code+1044>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58bad0 <exec_byte_code+7136>, 
          0x58bafe <exec_byte_code+7182>, 0x58bb27 <exec_byte_code+7223>, 
          0x58bb50 <exec_byte_code+7264>, 0x58bb87 <exec_byte_code+7319>, 
          0x58bbbe <exec_byte_code+7374>, 0x58bbe7 <exec_byte_code+7415>, 
          0x58bcb4 <exec_byte_code+7620>, 0x58be70 <exec_byte_code+8064>, 
          0x58bea7 <exec_byte_code+8119>, 0x58bede <exec_byte_code+8174>, 
          0x58bf0c <exec_byte_code+8220>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a84e <exec_byte_code+2398>, 0x58a681 <exec_byte_code+1937>, 
          0x58a346 <exec_byte_code+1110>, 0x58a71d <exec_byte_code+2093>, 
          0x58a7d3 <exec_byte_code+2275>, 0x58a9bc <exec_byte_code+2764>, 
          0x58ad13 <exec_byte_code+3619>, 0x58ad67 <exec_byte_code+3703>, 
          0x58a50e <exec_byte_code+1566>, 0x58a897 <exec_byte_code+2471>, 
          0x58a8c5 <exec_byte_code+2517>, 0x58a924 <exec_byte_code+2612>, 
          0x58a952 <exec_byte_code+2658>, 0x58a98e <exec_byte_code+2718>, 
          0x58ad87 <exec_byte_code+3735>, 0x58adc3 <exec_byte_code+3795>, 
          0x58ae06 <exec_byte_code+3862>, 0x58a655 <exec_byte_code+1893>, 
          0x58bceb <exec_byte_code+7675>, 0x58bd27 <exec_byte_code+7735>, 
          0x58bd50 <exec_byte_code+7776>, 0x58bd79 <exec_byte_code+7817>, 
---Type <return> to continue, or q <return> to quit---
          0x58bda2 <exec_byte_code+7858>, 0x58bdcb <exec_byte_code+7899>, 
          0x58be02 <exec_byte_code+7954>, 0x58be39 <exec_byte_code+8009>, 
          0x58c11b <exec_byte_code+8747>, 0x58c152 <exec_byte_code+8802>, 
          0x58c198 <exec_byte_code+8872>, 0x58c1cf <exec_byte_code+8927>, 
          0x58c206 <exec_byte_code+8982>, 0x58c22f <exec_byte_code+9023>, 
          0x58c266 <exec_byte_code+9078>, 0x58c29d <exec_byte_code+9133>, 
          0x58c2d7 <exec_byte_code+9191>, 0x58c37d <exec_byte_code+9357>, 
          0x58b73c <exec_byte_code+6220>, 0x58b772 <exec_byte_code+6274>, 
          0x58c316 <exec_byte_code+9254>, 0x58c349 <exec_byte_code+9305>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58aa6f <exec_byte_code+2943>, 
          0x58aaf8 <exec_byte_code+3080>, 0x58ab67 <exec_byte_code+3191>, 
          0x58ac06 <exec_byte_code+3350>, 0x58ac76 <exec_byte_code+3462>, 
          0x58b12a <exec_byte_code+4666>, 0x58b3dd <exec_byte_code+5357>, 
          0x58b836 <exec_byte_code+6470>, 0x58c014 <exec_byte_code+8484>, 
          0x58c054 <exec_byte_code+8548>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58c0a7 <exec_byte_code+8631>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 
          0x58c0ee <exec_byte_code+8702> <repeats 64 times>}
        stack = {
---Type <return> to continue, or q <return> to quit---
          pc = 0xa6e1a1 <pure+2364097> "\210\n\203\027", 
          byte_string = 9882281, 
          byte_string_start = 0xa6e199 <pure+2364089> "\b\211\021\203j", 
          constants = 9882317, 
          next = 0x7fffffff9e50
        }
        result = 12067362
#8  0x0000000000554491 in funcall_lambda (fun=9882229, nargs=nargs <at> entry=1, 
    arg_vector=arg_vector <at> entry=0x7fffffff9e00) at eval.c:3010
        val = <optimized out>
        syms_left = 12067362
        next = <optimized out>
        lexenv = 12067362
        count = 31
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#9  0x00000000005547bb in Ffuncall (nargs=2, args=0x7fffffff9df8)
    at eval.c:2839
        fun = <optimized out>
        original_fun = 19797058
        funcar = <optimized out>
        numargs = 1
---Type <return> to continue, or q <return> to quit---
        lisp_numargs = <optimized out>
        val = <optimized out>
        backtrace = {
          next = 0x7fffffff9f50, 
          function = 19797058, 
          args = 0x7fffffff9e00, 
          nargs = 1, 
          debug_on_exit = 0
        }
        internal_args = <optimized out>
        i = <optimized out>
#10 0x000000000058a1e3 in exec_byte_code (bytestr=31577446, vector=21, 
    maxdepth=5, args_template=4611686018695757824, nargs=4611686018430533632, 
    args=0x7fffffff9568, args <at> entry=0x0) at bytecode.c:900
        targets = {0x58a2f8 <exec_byte_code+1032>, 
          0x58c311 <exec_byte_code+9249>, 0x58c3b3 <exec_byte_code+9411>, 
          0x58bf7a <exec_byte_code+8330>, 0x58a24a <exec_byte_code+858>, 
          0x58a24a <exec_byte_code+858>, 0x58bf7f <exec_byte_code+8335>, 
          0x58bfc0 <exec_byte_code+8400>, 0x58bf35 <exec_byte_code+8261>, 
          0x58bf3a <exec_byte_code+8266>, 0x58bf3f <exec_byte_code+8271>, 
          0x58bf45 <exec_byte_code+8277>, 0x58a0d2 <exec_byte_code+482>, 
          0x58a0d8 <exec_byte_code+488>, 0x58a332 <exec_byte_code+1090>, 
          0x58bf55 <exec_byte_code+8293>, 0x58a4b0 <exec_byte_code+1472>, 
---Type <return> to continue, or q <return> to quit---
          0x58a4b5 <exec_byte_code+1477>, 0x58a4ba <exec_byte_code+1482>, 
          0x58a4c5 <exec_byte_code+1493>, 0x58a126 <exec_byte_code+566>, 
          0x58a130 <exec_byte_code+576>, 0x58a4fa <exec_byte_code+1546>, 
          0x58a4d5 <exec_byte_code+1509>, 0x58a570 <exec_byte_code+1664>, 
          0x58a575 <exec_byte_code+1669>, 0x58a57a <exec_byte_code+1674>, 
          0x58a585 <exec_byte_code+1685>, 0x58a18a <exec_byte_code+666>, 
          0x58a190 <exec_byte_code+672>, 0x58a537 <exec_byte_code+1607>, 
          0x58a54b <exec_byte_code+1627>, 0x58a5ce <exec_byte_code+1758>, 
          0x58a5d3 <exec_byte_code+1763>, 0x58a5d8 <exec_byte_code+1768>, 
          0x58a5e5 <exec_byte_code+1781>, 0x58a1c3 <exec_byte_code+723>, 
          0x58a1c8 <exec_byte_code+728>, 0x58a595 <exec_byte_code+1701>, 
          0x58a5a9 <exec_byte_code+1721>, 0x58a62e <exec_byte_code+1854>, 
          0x58a633 <exec_byte_code+1859>, 0x58a638 <exec_byte_code+1864>, 
          0x58a645 <exec_byte_code+1877>, 0x58a203 <exec_byte_code+787>, 
          0x58a208 <exec_byte_code+792>, 0x58a5f5 <exec_byte_code+1797>, 
          0x58a609 <exec_byte_code+1817>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58ae64 <exec_byte_code+3956>, 
          0x58aef0 <exec_byte_code+4096>, 0x58af29 <exec_byte_code+4153>, 
          0x58af62 <exec_byte_code+4210>, 0x58af9b <exec_byte_code+4267>, 
          0x58a400 <exec_byte_code+1296>, 0x58a43d <exec_byte_code+1357>, 
---Type <return> to continue, or q <return> to quit---
          0x58afde <exec_byte_code+4334>, 0x58a3c4 <exec_byte_code+1236>, 
          0x58a474 <exec_byte_code+1412>, 0x58b011 <exec_byte_code+4385>, 
          0x58b048 <exec_byte_code+4440>, 0x58b078 <exec_byte_code+4488>, 
          0x58b0be <exec_byte_code+4558>, 0x58b0f4 <exec_byte_code+4612>, 
          0x58b16c <exec_byte_code+4732>, 0x58b195 <exec_byte_code+4773>, 
          0x58b1cc <exec_byte_code+4828>, 0x58b208 <exec_byte_code+4888>, 
          0x58b231 <exec_byte_code+4929>, 0x58b25a <exec_byte_code+4970>, 
          0x58b291 <exec_byte_code+5025>, 0x58b2c8 <exec_byte_code+5080>, 
          0x58b2ff <exec_byte_code+5135>, 0x58b33b <exec_byte_code+5195>, 
          0x58b371 <exec_byte_code+5249>, 0x58b3a7 <exec_byte_code+5303>, 
          0x58b41f <exec_byte_code+5423>, 0x58b459 <exec_byte_code+5481>, 
          0x58b493 <exec_byte_code+5539>, 0x58b51f <exec_byte_code+5679>, 
          0x58b556 <exec_byte_code+5734>, 0x58b58d <exec_byte_code+5789>, 
          0x58b5c4 <exec_byte_code+5844>, 0x58b5fb <exec_byte_code+5899>, 
          0x58b631 <exec_byte_code+5953>, 0x58b664 <exec_byte_code+6004>, 
          0x58b69a <exec_byte_code+6058>, 0x58b6d0 <exec_byte_code+6112>, 
          0x58b706 <exec_byte_code+6166>, 0x58b7a9 <exec_byte_code+6329>, 
          0x58a304 <exec_byte_code+1044>, 0x58b7e0 <exec_byte_code+6384>, 
          0x58b809 <exec_byte_code+6425>, 0x58b878 <exec_byte_code+6536>, 
          0x58b8af <exec_byte_code+6591>, 0x58b8e6 <exec_byte_code+6646>, 
          0x58b90f <exec_byte_code+6687>, 0x58b939 <exec_byte_code+6729>, 
          0x58b963 <exec_byte_code+6771>, 0x58b991 <exec_byte_code+6817>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58b9c1 <exec_byte_code+6865>, 
---Type <return> to continue, or q <return> to quit---
          0x58b9ef <exec_byte_code+6911>, 0x58ba1d <exec_byte_code+6957>, 
          0x58ba4b <exec_byte_code+7003>, 0x58ba79 <exec_byte_code+7049>, 
          0x58baa7 <exec_byte_code+7095>, 0x58a304 <exec_byte_code+1044>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58bad0 <exec_byte_code+7136>, 
          0x58bafe <exec_byte_code+7182>, 0x58bb27 <exec_byte_code+7223>, 
          0x58bb50 <exec_byte_code+7264>, 0x58bb87 <exec_byte_code+7319>, 
          0x58bbbe <exec_byte_code+7374>, 0x58bbe7 <exec_byte_code+7415>, 
          0x58bcb4 <exec_byte_code+7620>, 0x58be70 <exec_byte_code+8064>, 
          0x58bea7 <exec_byte_code+8119>, 0x58bede <exec_byte_code+8174>, 
          0x58bf0c <exec_byte_code+8220>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a84e <exec_byte_code+2398>, 0x58a681 <exec_byte_code+1937>, 
          0x58a346 <exec_byte_code+1110>, 0x58a71d <exec_byte_code+2093>, 
          0x58a7d3 <exec_byte_code+2275>, 0x58a9bc <exec_byte_code+2764>, 
          0x58ad13 <exec_byte_code+3619>, 0x58ad67 <exec_byte_code+3703>, 
          0x58a50e <exec_byte_code+1566>, 0x58a897 <exec_byte_code+2471>, 
          0x58a8c5 <exec_byte_code+2517>, 0x58a924 <exec_byte_code+2612>, 
          0x58a952 <exec_byte_code+2658>, 0x58a98e <exec_byte_code+2718>, 
          0x58ad87 <exec_byte_code+3735>, 0x58adc3 <exec_byte_code+3795>, 
          0x58ae06 <exec_byte_code+3862>, 0x58a655 <exec_byte_code+1893>, 
          0x58bceb <exec_byte_code+7675>, 0x58bd27 <exec_byte_code+7735>, 
          0x58bd50 <exec_byte_code+7776>, 0x58bd79 <exec_byte_code+7817>, 
          0x58bda2 <exec_byte_code+7858>, 0x58bdcb <exec_byte_code+7899>, 
          0x58be02 <exec_byte_code+7954>, 0x58be39 <exec_byte_code+8009>, 
---Type <return> to continue, or q <return> to quit---
          0x58c11b <exec_byte_code+8747>, 0x58c152 <exec_byte_code+8802>, 
          0x58c198 <exec_byte_code+8872>, 0x58c1cf <exec_byte_code+8927>, 
          0x58c206 <exec_byte_code+8982>, 0x58c22f <exec_byte_code+9023>, 
          0x58c266 <exec_byte_code+9078>, 0x58c29d <exec_byte_code+9133>, 
          0x58c2d7 <exec_byte_code+9191>, 0x58c37d <exec_byte_code+9357>, 
          0x58b73c <exec_byte_code+6220>, 0x58b772 <exec_byte_code+6274>, 
          0x58c316 <exec_byte_code+9254>, 0x58c349 <exec_byte_code+9305>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58aa6f <exec_byte_code+2943>, 
          0x58aaf8 <exec_byte_code+3080>, 0x58ab67 <exec_byte_code+3191>, 
          0x58ac06 <exec_byte_code+3350>, 0x58ac76 <exec_byte_code+3462>, 
          0x58b12a <exec_byte_code+4666>, 0x58b3dd <exec_byte_code+5357>, 
          0x58b836 <exec_byte_code+6470>, 0x58c014 <exec_byte_code+8484>, 
          0x58c054 <exec_byte_code+8548>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58c0a7 <exec_byte_code+8631>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 0x58a2f8 <exec_byte_code+1032>, 
          0x58a2f8 <exec_byte_code+1032>, 
          0x58c0ee <exec_byte_code+8702> <repeats 64 times>}
        stack = {
          pc = 0xa6e167 <pure+2364039> "\207", 
          byte_string = 9882865, 
---Type <return> to continue, or q <return> to quit---
          byte_string_start = 0xa6e14f <pure+2364015> "\303\304\b\305\306$\210\t\203\025", 
          constants = 9882901, 
          next = 0x7fffffffa030
        }
        result = 12067362
#11 0x0000000000554491 in funcall_lambda (fun=9882765, nargs=nargs <at> entry=2, 
    arg_vector=arg_vector <at> entry=0x7fffffff9fd0) at eval.c:3010
        val = <optimized out>
        syms_left = 12067362
        next = <optimized out>
        lexenv = 12067362
        count = 29
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#12 0x00000000005547bb in Ffuncall (nargs=3, args=0x7fffffff9fc8)
    at eval.c:2839
        fun = <optimized out>
        original_fun = 15482034
        funcar = <optimized out>
        numargs = 2
        lisp_numargs = <optimized out>

...
        
In GNU Emacs 24.2.93.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.6.0)
 of 2013-02-18 on vbx
Bzr revision: 111274 eliz <at> gnu.org-20130217181734-8yalkg5ebeud6hkx
Windowing system distributor `The X.Org Foundation', version 11.0.11300000
System Description:	Ubuntu 12.10




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 18 Feb 2013 16:14:01 GMT) Full text and rfc822 format available.

Message #8 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 18 Feb 2013 18:11:50 +0200
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> Date: Mon, 18 Feb 2013 10:41:31 +0400
> 
> Emacs reliably crashes when [s]tealing a file that's opened in another
> instance. I can only reproduce this when the buffer opens in mmm-mode
> (so the bug may be related to indirect buffers), and apparently mmm-mode
> modifies the buffer in some way automatically, so the prompt to
> steal/proceed/quit is shown as soon as I open the file.
> 
> I think this is the first situation I've seen Emacs crash, in quite a
> while.
> 
> 
> (gdb) xbacktrace
> "put-text-property" (0xffff9a20)
> "jit-lock-refontify" (0xffff9c00)
> "jit-lock-mode" (0xffff9e00)
> "jit-lock-register" (0xffff9fd0)
> "font-lock-turn-on-thing-lock" (0xffffa1b0)
> "font-lock-mode-internal" (0xffffa380)
> "font-lock-default-function" (0xffffa550)
> "font-lock-mode" (0xffffa720)
> "turn-on-font-lock" (0xffffa8d0)
> "turn-on-font-lock-if-desired" (0xffffaa90)
> "global-font-lock-mode-enable-in-buffers" (0xffffaca8)
> "run-hooks" (0xffffad68)
> "apply" (0xffffaec0)
> "run-mode-hooks" (0xffffaff0)
> "html-erb-mode" (0xffffb2a8)
> "funcall" (0xffffb2a0)
> "save-current-buffer" (0xffffb418)
> "unwind-protect" (0xffffb538)
> "let" (0xffffb6d8)
> "if" (0xffffb7e8)
> "let" (0xffffb9a8)
> "mmm-update-mode-info" (0xffffbaf0)
> "if" (0xffffbcc8)
> ---Type <return> to continue, or q <return> to quit---
> "if" (0xffffbdd8)
> "mmm-mode-on" (0xffffbf20)
> "cond" (0xffffc0e8)
> "mmm-mode-on-maybe" (0xffffc2d8)
> "funcall" (0xffffc2d0)
> "progn" (0xffffc428)
> "condition-case" (0xffffc6a8)
> "while" (0xffffc7d8)
> "let" (0xffffc978)
> "progn" (0xffffca88)
> "mmm-run-major-mode-hook" (0xffffcbd0)
> "save-current-buffer" (0xffffcdb8)
> "progn" (0xffffcec8)
> "if" (0xffffcfc8)
> "while" (0xffffd0f8)
> "let" (0xffffd298)
> "progn" (0xffffd3a8)
> "mmm-check-changed-buffers" (0xffffd590)
> (gdb)
> 
> ===
> 
> bt full is too long for my terminal, so here's the top. Let me know if
> it's not enough, I'll try to increase the history limit or whatever.
> 
> (gdb) bt full
> #0  add_properties (plist=plist <at> entry=31577430, i=i <at> entry=0x0, 
>     object=object <at> entry=12438597) at textprop.c:378
>         tail1 = 31577430
>         tail2 = <optimized out>
>         sym1 = 12306530
>         val1 = 12067362
>         changed = <optimized out>
>         found = 0

Can you recompile without optimizations, and show the backtrace from
that build?  Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 18 Feb 2013 19:37:02 GMT) Full text and rfc822 format available.

Message #11 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Glenn Morris <rgm <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 18 Feb 2013 14:35:50 -0500
Dmitry Gutov wrote:

> Emacs reliably crashes when [s]tealing a file that's opened in another
> instance. 

The inevitable question: does this happen with older Emacs versions too?
In particular pre 24.1?

> In GNU Emacs 24.2.93.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.6.0)
>  of 2013-02-18 on vbx




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Tue, 19 Feb 2013 00:55:01 GMT) Full text and rfc822 format available.

Message #14 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;	Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Tue, 19 Feb 2013 04:52:59 +0400
On 18.02.2013 20:11, Eli Zaretskii wrote:
> Can you recompile without optimizations, and show the backtrace from
> that build?  Thanks.

Here you go:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000653481 in add_properties (plist=32025878, i=0x0, 
object=31976325)
    at textprop.c:378
378	      for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
(gdb) bt full
#0  0x0000000000653481 in add_properties (plist=32025878, i=0x0,
    object=31976325) at textprop.c:378
        tail1 = 32025878
        tail2 = 31873526
        sym1 = 13125730
        val1 = 12886562
        changed = 0
        found = 0
        gcpro1 = {
          next = 0x7fffffff6180,
          var = 0x57dc19 <modify_region+481>,
          nvars = 4295010134
        }
        gcpro2 = {
          next = 0x7fffffff6180,
          var = 0x57dc19 <modify_region+481>,
          nvars = 4295010134
        }
        gcpro3 = {
          next = 0x7fffffff6180,
          var = 0x57dc19 <modify_region+481>,
          nvars = 4295010134
        }
---Type <return> to continue, or q <return> to quit---
#1  0x0000000000655963 in Fadd_text_properties (start=4, end=3068,
    properties=32025878, object=31976325) at textprop.c:1212
        i = 0x0
        unchanged = 0x7fffffffa568
        s = 1
        len = 558
        modified = 19
        gcpro1 = {
          next = 0xa31e4d <pure+1297709>,
          var = 0xa31e29 <pure+1297673>,
          nvars = 579820584989
        }
#2  0x00000000006559e0 in Fput_text_property (start=4, end=3068,
    property=13125730, value=12886562, object=12886562) at textprop.c:1229
No locals.
#3  0x00000000005e6cc9 in Ffuncall (nargs=5, args=0x7fffffff6368)
    at eval.c:2794
        fun = 12265781
        original_fun = 13073714
        funcar = 12706944
        numargs = 4
        lisp_numargs = 31976320
        val = -4294966896
---Type <return> to continue, or q <return> to quit---
        backtrace = {
          next = 0x7fffffff6820,
          function = 13073714,
          args = 0x7fffffff6370,
          nargs = 4,
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff6270
        i = 5
#4  0x000000000062fd90 in exec_byte_code (bytestr=10703001, 
vector=10703037,
    maxdepth=24, args_template=12886562, nargs=0, args=0x0) at 
bytecode.c:900
        targets = {0x633680 <exec_byte_code+17815>,
          0x63368f <exec_byte_code+17830>, 0x633691 
<exec_byte_code+17832>,
          0x633693 <exec_byte_code+17834>, 0x633695 
<exec_byte_code+17836>,
          0x633695 <exec_byte_code+17836>, 0x6336ff 
<exec_byte_code+17942>,
          0x633773 <exec_byte_code+18058>, 0x62f608 <exec_byte_code+1311>,
          0x62f60a <exec_byte_code+1313>, 0x62f60c <exec_byte_code+1315>,
          0x62f60e <exec_byte_code+1317>, 0x62f610 <exec_byte_code+1319>,
          0x62f610 <exec_byte_code+1319>, 0x62f619 <exec_byte_code+1328>,
          0x62f5d3 <exec_byte_code+1258>, 0x62fa8c <exec_byte_code+2467>,
          0x62fa8e <exec_byte_code+2469>, 0x62fa90 <exec_byte_code+2471>,
          0x62fa92 <exec_byte_code+2473>, 0x62fa94 <exec_byte_code+2475>,
          0x62fa94 <exec_byte_code+2475>, 0x62fad2 <exec_byte_code+2537>,
---Type <return> to continue, or q <return> to quit---
          0x62fa9d <exec_byte_code+2484>, 0x62fc85 <exec_byte_code+2972>,
          0x62fc87 <exec_byte_code+2974>, 0x62fc89 <exec_byte_code+2976>,
          0x62fc8b <exec_byte_code+2978>, 0x62fc8d <exec_byte_code+2980>,
          0x62fc8d <exec_byte_code+2980>, 0x62fc36 <exec_byte_code+2893>,
          0x62fc50 <exec_byte_code+2919>, 0x62fd4e <exec_byte_code+3173>,
          0x62fd50 <exec_byte_code+3175>, 0x62fd52 <exec_byte_code+3177>,
          0x62fd54 <exec_byte_code+3179>, 0x62fd56 <exec_byte_code+3181>,
          0x62fd56 <exec_byte_code+3181>, 0x62fcff <exec_byte_code+3094>,
          0x62fd19 <exec_byte_code+3120>, 0x62fe1a <exec_byte_code+3377>,
          0x62fe1c <exec_byte_code+3379>, 0x62fe1e <exec_byte_code+3381>,
          0x62fe20 <exec_byte_code+3383>, 0x62fe22 <exec_byte_code+3385>,
          0x62fe22 <exec_byte_code+3385>, 0x62fdcb <exec_byte_code+3298>,
          0x62fde5 <exec_byte_code+3324>, 0x633680 <exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x630e06 <exec_byte_code+7453>,
          0x630f3a <exec_byte_code+7761>, 0x630f97 <exec_byte_code+7854>,
          0x630ff4 <exec_byte_code+7947>, 0x631051 <exec_byte_code+8040>,
          0x62f8fd <exec_byte_code+2068>, 0x62f974 <exec_byte_code+2187>,
          0x6310c4 <exec_byte_code+8155>, 0x62f856 <exec_byte_code+1901>,
          0x62f9e4 <exec_byte_code+2299>, 0x631125 <exec_byte_code+8252>,
          0x631195 <exec_byte_code+8364>, 0x6311ec <exec_byte_code+8451>,
---Type <return> to continue, or q <return> to quit---
          0x631271 <exec_byte_code+8584>, 0x6312c8 <exec_byte_code+8671>,
          0x6313ac <exec_byte_code+8899>, 0x6313f9 <exec_byte_code+8976>,
          0x631469 <exec_byte_code+9088>, 0x6314f9 <exec_byte_code+9232>,
          0x631546 <exec_byte_code+9309>, 0x631593 <exec_byte_code+9386>,
          0x631603 <exec_byte_code+9498>, 0x631673 <exec_byte_code+9610>,
          0x6316e3 <exec_byte_code+9722>, 0x631773 <exec_byte_code+9866>,
          0x6317ca <exec_byte_code+9953>, 0x631821 <exec_byte_code+10040>,
          0x631905 <exec_byte_code+10268>, 0x63199b 
<exec_byte_code+10418>,
          0x631a31 <exec_byte_code+10568>, 0x631c9a 
<exec_byte_code+11185>,
          0x631d0a <exec_byte_code+11297>, 0x631d7a 
<exec_byte_code+11409>,
          0x631dea <exec_byte_code+11521>, 0x631e5a 
<exec_byte_code+11633>,
          0x631eb1 <exec_byte_code+11720>, 0x631f4b 
<exec_byte_code+11874>,
          0x631fa2 <exec_byte_code+11961>, 0x631ff9 
<exec_byte_code+12048>,
          0x632050 <exec_byte_code+12135>, 0x63216e 
<exec_byte_code+12421>,
          0x630a71 <exec_byte_code+6536>, 0x6321d1 <exec_byte_code+12520>,
          0x63221e <exec_byte_code+12597>, 0x6322fa 
<exec_byte_code+12817>,
          0x63235d <exec_byte_code+12916>, 0x6323c0 
<exec_byte_code+13015>,
          0x63240d <exec_byte_code+13092>, 0x632463 
<exec_byte_code+13178>,
          0x6324b9 <exec_byte_code+13264>, 0x632513 
<exec_byte_code+13354>,
          0x633680 <exec_byte_code+17815>, 0x63256a 
<exec_byte_code+13441>,
          0x6325b2 <exec_byte_code+13513>, 0x6325fa 
<exec_byte_code+13585>,
          0x632642 <exec_byte_code+13657>, 0x63268a 
<exec_byte_code+13729>,
          0x6326d2 <exec_byte_code+13801>, 0x630a71 <exec_byte_code+6536>,
---Type <return> to continue, or q <return> to quit---
          0x633680 <exec_byte_code+17815>, 0x63271f 
<exec_byte_code+13878>,
          0x632767 <exec_byte_code+13950>, 0x6327b4 
<exec_byte_code+14027>,
          0x632801 <exec_byte_code+14104>, 0x632871 
<exec_byte_code+14216>,
          0x6328e1 <exec_byte_code+14328>, 0x63292e 
<exec_byte_code+14405>,
          0x632b91 <exec_byte_code+15016>, 0x632c01 
<exec_byte_code+15128>,
          0x632c71 <exec_byte_code+15240>, 0x632ce1 
<exec_byte_code+15352>,
          0x632d29 <exec_byte_code+15424>, 0x633680 
<exec_byte_code+17815>,
          0x63099c <exec_byte_code+6323>, 0x62fee9 <exec_byte_code+3584>,
          0x62f717 <exec_byte_code+1582>, 0x62fffb <exec_byte_code+3858>,
          0x63013a <exec_byte_code+4177>, 0x630270 <exec_byte_code+4487>,
          0x630907 <exec_byte_code+6174>, 0x630963 <exec_byte_code+6266>,
          0x62fbdb <exec_byte_code+2802>, 0x630a2e <exec_byte_code+6469>,
          0x630aa7 <exec_byte_code+6590>, 0x630b46 <exec_byte_code+6749>,
          0x630b89 <exec_byte_code+6816>, 0x630bfb <exec_byte_code+6930>,
          0x630c4b <exec_byte_code+7010>, 0x630cdb <exec_byte_code+7154>,
          0x630d65 <exec_byte_code+7292>, 0x62fe9f <exec_byte_code+3510>,
          0x632d76 <exec_byte_code+15501>, 0x632e06 
<exec_byte_code+15645>,
          0x632e53 <exec_byte_code+15722>, 0x632ea0 
<exec_byte_code+15799>,
          0x632eed <exec_byte_code+15876>, 0x632f3a 
<exec_byte_code+15953>,
          0x632faa <exec_byte_code+16065>, 0x63301a 
<exec_byte_code+16177>,
          0x63308a <exec_byte_code+16289>, 0x6330fa 
<exec_byte_code+16401>,
          0x633285 <exec_byte_code+16796>, 0x6332f5 
<exec_byte_code+16908>,
          0x633365 <exec_byte_code+17020>, 0x6333b2 
<exec_byte_code+17097>,
---Type <return> to continue, or q <return> to quit---
          0x633422 <exec_byte_code+17209>, 0x63348c 
<exec_byte_code+17315>,
          0x6334f5 <exec_byte_code+17420>, 0x63355f 
<exec_byte_code+17526>,
          0x6320a7 <exec_byte_code+12222>, 0x6320fe 
<exec_byte_code+12309>,
          0x6335b6 <exec_byte_code+17613>, 0x633624 
<exec_byte_code+17723>,
          0x633680 <exec_byte_code+17815>, 0x6303a6 <exec_byte_code+4797>,
          0x63048b <exec_byte_code+5026>, 0x6305a9 <exec_byte_code+5312>,
          0x6306c7 <exec_byte_code+5598>, 0x6307e7 <exec_byte_code+5886>,
          0x63131f <exec_byte_code+8758>, 0x631878 <exec_byte_code+10127>,
          0x63226d <exec_byte_code+12676>, 0x63380f 
<exec_byte_code+18214>,
          0x633883 <exec_byte_code+18330>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x63391f 
<exec_byte_code+18486>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>,
          0x6339bd <exec_byte_code+18644> <repeats 64 times>}
        count = 34
        op = 4
        vectorp = 0xa350c8 <pure+1310632>
        stack = {
          pc = 0xb3637b <pure+2363995> ".\n\207",
          byte_string = 10703001,
---Type <return> to continue, or q <return> to quit---
          byte_string_start = 0xb36353 <pure+2363955> "\306\030\307 
\031\032\033\306\034\035\036\f\310\036\r\214~\210\312\016\016\206\037",
          constants = 10703037,
          next = 0x7fffffff6c20
        }
        top = 0x7fffffff6368
        result = 140737488315744
#5  0x00000000005e7609 in funcall_lambda (fun=10702949, nargs=0,
    arg_vector=0x7fffffff6880) at eval.c:3010
        val = 17086304
        syms_left = 12886562
        next = 16218994
        lexenv = 12886562
        count = 32
        i = 0
        optional = true
        rest = false
#6  0x00000000005e6e09 in Ffuncall (nargs=1, args=0x7fffffff6878)
    at eval.c:2827
        fun = 10702949
        original_fun = 20632738
        funcar = 20632546
        numargs = 0
---Type <return> to continue, or q <return> to quit---
        lisp_numargs = 12886610
        val = 140737488316512
        backtrace = {
          next = 0x7fffffff6d50,
          function = 20632738,
          args = 0x7fffffff6880,
          nargs = 0,
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff6db0
        i = 6072020
#7  0x000000000062fd90 in exec_byte_code (bytestr=10702057, 
vector=10702093,
    maxdepth=44, args_template=12886562, nargs=0, args=0x0) at 
bytecode.c:900
        targets = {0x633680 <exec_byte_code+17815>,
          0x63368f <exec_byte_code+17830>, 0x633691 
<exec_byte_code+17832>,
          0x633693 <exec_byte_code+17834>, 0x633695 
<exec_byte_code+17836>,
          0x633695 <exec_byte_code+17836>, 0x6336ff 
<exec_byte_code+17942>,
          0x633773 <exec_byte_code+18058>, 0x62f608 <exec_byte_code+1311>,
          0x62f60a <exec_byte_code+1313>, 0x62f60c <exec_byte_code+1315>,
          0x62f60e <exec_byte_code+1317>, 0x62f610 <exec_byte_code+1319>,
          0x62f610 <exec_byte_code+1319>, 0x62f619 <exec_byte_code+1328>,
          0x62f5d3 <exec_byte_code+1258>, 0x62fa8c <exec_byte_code+2467>,
          0x62fa8e <exec_byte_code+2469>, 0x62fa90 <exec_byte_code+2471>,
---Type <return> to continue, or q <return> to quit---
          0x62fa92 <exec_byte_code+2473>, 0x62fa94 <exec_byte_code+2475>,
          0x62fa94 <exec_byte_code+2475>, 0x62fad2 <exec_byte_code+2537>,
          0x62fa9d <exec_byte_code+2484>, 0x62fc85 <exec_byte_code+2972>,
          0x62fc87 <exec_byte_code+2974>, 0x62fc89 <exec_byte_code+2976>,
          0x62fc8b <exec_byte_code+2978>, 0x62fc8d <exec_byte_code+2980>,
          0x62fc8d <exec_byte_code+2980>, 0x62fc36 <exec_byte_code+2893>,
          0x62fc50 <exec_byte_code+2919>, 0x62fd4e <exec_byte_code+3173>,
          0x62fd50 <exec_byte_code+3175>, 0x62fd52 <exec_byte_code+3177>,
          0x62fd54 <exec_byte_code+3179>, 0x62fd56 <exec_byte_code+3181>,
          0x62fd56 <exec_byte_code+3181>, 0x62fcff <exec_byte_code+3094>,
          0x62fd19 <exec_byte_code+3120>, 0x62fe1a <exec_byte_code+3377>,
          0x62fe1c <exec_byte_code+3379>, 0x62fe1e <exec_byte_code+3381>,
          0x62fe20 <exec_byte_code+3383>, 0x62fe22 <exec_byte_code+3385>,
          0x62fe22 <exec_byte_code+3385>, 0x62fdcb <exec_byte_code+3298>,
          0x62fde5 <exec_byte_code+3324>, 0x633680 <exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x630e06 <exec_byte_code+7453>,
          0x630f3a <exec_byte_code+7761>, 0x630f97 <exec_byte_code+7854>,
          0x630ff4 <exec_byte_code+7947>, 0x631051 <exec_byte_code+8040>,
          0x62f8fd <exec_byte_code+2068>, 0x62f974 <exec_byte_code+2187>,
          0x6310c4 <exec_byte_code+8155>, 0x62f856 <exec_byte_code+1901>,
---Type <return> to continue, or q <return> to quit---
          0x62f9e4 <exec_byte_code+2299>, 0x631125 <exec_byte_code+8252>,
          0x631195 <exec_byte_code+8364>, 0x6311ec <exec_byte_code+8451>,
          0x631271 <exec_byte_code+8584>, 0x6312c8 <exec_byte_code+8671>,
          0x6313ac <exec_byte_code+8899>, 0x6313f9 <exec_byte_code+8976>,
          0x631469 <exec_byte_code+9088>, 0x6314f9 <exec_byte_code+9232>,
          0x631546 <exec_byte_code+9309>, 0x631593 <exec_byte_code+9386>,
          0x631603 <exec_byte_code+9498>, 0x631673 <exec_byte_code+9610>,
          0x6316e3 <exec_byte_code+9722>, 0x631773 <exec_byte_code+9866>,
          0x6317ca <exec_byte_code+9953>, 0x631821 <exec_byte_code+10040>,
          0x631905 <exec_byte_code+10268>, 0x63199b 
<exec_byte_code+10418>,
          0x631a31 <exec_byte_code+10568>, 0x631c9a 
<exec_byte_code+11185>,
          0x631d0a <exec_byte_code+11297>, 0x631d7a 
<exec_byte_code+11409>,
          0x631dea <exec_byte_code+11521>, 0x631e5a 
<exec_byte_code+11633>,
          0x631eb1 <exec_byte_code+11720>, 0x631f4b 
<exec_byte_code+11874>,
          0x631fa2 <exec_byte_code+11961>, 0x631ff9 
<exec_byte_code+12048>,
          0x632050 <exec_byte_code+12135>, 0x63216e 
<exec_byte_code+12421>,
          0x630a71 <exec_byte_code+6536>, 0x6321d1 <exec_byte_code+12520>,
          0x63221e <exec_byte_code+12597>, 0x6322fa 
<exec_byte_code+12817>,
          0x63235d <exec_byte_code+12916>, 0x6323c0 
<exec_byte_code+13015>,
          0x63240d <exec_byte_code+13092>, 0x632463 
<exec_byte_code+13178>,
          0x6324b9 <exec_byte_code+13264>, 0x632513 
<exec_byte_code+13354>,
          0x633680 <exec_byte_code+17815>, 0x63256a 
<exec_byte_code+13441>,
          0x6325b2 <exec_byte_code+13513>, 0x6325fa 
<exec_byte_code+13585>,
---Type <return> to continue, or q <return> to quit---
          0x632642 <exec_byte_code+13657>, 0x63268a 
<exec_byte_code+13729>,
          0x6326d2 <exec_byte_code+13801>, 0x630a71 <exec_byte_code+6536>,
          0x633680 <exec_byte_code+17815>, 0x63271f 
<exec_byte_code+13878>,
          0x632767 <exec_byte_code+13950>, 0x6327b4 
<exec_byte_code+14027>,
          0x632801 <exec_byte_code+14104>, 0x632871 
<exec_byte_code+14216>,
          0x6328e1 <exec_byte_code+14328>, 0x63292e 
<exec_byte_code+14405>,
          0x632b91 <exec_byte_code+15016>, 0x632c01 
<exec_byte_code+15128>,
          0x632c71 <exec_byte_code+15240>, 0x632ce1 
<exec_byte_code+15352>,
          0x632d29 <exec_byte_code+15424>, 0x633680 
<exec_byte_code+17815>,
          0x63099c <exec_byte_code+6323>, 0x62fee9 <exec_byte_code+3584>,
          0x62f717 <exec_byte_code+1582>, 0x62fffb <exec_byte_code+3858>,
          0x63013a <exec_byte_code+4177>, 0x630270 <exec_byte_code+4487>,
          0x630907 <exec_byte_code+6174>, 0x630963 <exec_byte_code+6266>,
          0x62fbdb <exec_byte_code+2802>, 0x630a2e <exec_byte_code+6469>,
          0x630aa7 <exec_byte_code+6590>, 0x630b46 <exec_byte_code+6749>,
          0x630b89 <exec_byte_code+6816>, 0x630bfb <exec_byte_code+6930>,
          0x630c4b <exec_byte_code+7010>, 0x630cdb <exec_byte_code+7154>,
          0x630d65 <exec_byte_code+7292>, 0x62fe9f <exec_byte_code+3510>,
          0x632d76 <exec_byte_code+15501>, 0x632e06 
<exec_byte_code+15645>,
          0x632e53 <exec_byte_code+15722>, 0x632ea0 
<exec_byte_code+15799>,
          0x632eed <exec_byte_code+15876>, 0x632f3a 
<exec_byte_code+15953>,
          0x632faa <exec_byte_code+16065>, 0x63301a 
<exec_byte_code+16177>,
          0x63308a <exec_byte_code+16289>, 0x6330fa 
<exec_byte_code+16401>,
---Type <return> to continue, or q <return> to quit---
          0x633285 <exec_byte_code+16796>, 0x6332f5 
<exec_byte_code+16908>,
          0x633365 <exec_byte_code+17020>, 0x6333b2 
<exec_byte_code+17097>,
          0x633422 <exec_byte_code+17209>, 0x63348c 
<exec_byte_code+17315>,
          0x6334f5 <exec_byte_code+17420>, 0x63355f 
<exec_byte_code+17526>,
          0x6320a7 <exec_byte_code+12222>, 0x6320fe 
<exec_byte_code+12309>,
          0x6335b6 <exec_byte_code+17613>, 0x633624 
<exec_byte_code+17723>,
          0x633680 <exec_byte_code+17815>, 0x6303a6 <exec_byte_code+4797>,
          0x63048b <exec_byte_code+5026>, 0x6305a9 <exec_byte_code+5312>,
          0x6306c7 <exec_byte_code+5598>, 0x6307e7 <exec_byte_code+5886>,
          0x63131f <exec_byte_code+8758>, 0x631878 <exec_byte_code+10127>,
          0x63226d <exec_byte_code+12676>, 0x63380f 
<exec_byte_code+18214>,
          0x633883 <exec_byte_code+18330>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x63391f 
<exec_byte_code+18486>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>,
          0x6339bd <exec_byte_code+18644> <repeats 64 times>}
        count = 32
        op = 0
        vectorp = 0xa34d18 <pure+1309688>
        stack = {
---Type <return> to continue, or q <return> to quit---
          pc = 0xb363e1 <pure+2364097> "\210\n\203\027",
          byte_string = 10702057,
          byte_string_start = 0xb363d9 <pure+2364089> "\b\211\021\203j",
          constants = 10702093,
          next = 0x7fffffff7120
        }
        top = 0x7fffffff6878
        result = 32026406
#8  0x00000000005e7609 in funcall_lambda (fun=10702005, nargs=1,
    arg_vector=0x7fffffff6db0) at eval.c:3010
        val = 32026406
        syms_left = 12886562
        next = 16205330
        lexenv = 12886562
        count = 31
        i = 1
        optional = false
        rest = false
#9  0x00000000005e6e09 in Ffuncall (nargs=2, args=0x7fffffff6da8)
    at eval.c:2827
        fun = 10702005
        original_fun = 20632546
        funcar = 20657074
---Type <return> to continue, or q <return> to quit---
        numargs = 1
        lisp_numargs = 12886610
        val = 140737488317840
        backtrace = {
          next = 0x7fffffff7250,
          function = 20632546,
          args = 0x7fffffff6db0,
          nargs = 1,
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff72b0
        i = 6072020
#10 0x000000000062fd90 in exec_byte_code (bytestr=10702641, 
vector=10702677,
    maxdepth=20, args_template=12886562, nargs=0, args=0x0) at 
bytecode.c:900
        targets = {0x633680 <exec_byte_code+17815>,
          0x63368f <exec_byte_code+17830>, 0x633691 
<exec_byte_code+17832>,
          0x633693 <exec_byte_code+17834>, 0x633695 
<exec_byte_code+17836>,
          0x633695 <exec_byte_code+17836>, 0x6336ff 
<exec_byte_code+17942>,
          0x633773 <exec_byte_code+18058>, 0x62f608 <exec_byte_code+1311>,
          0x62f60a <exec_byte_code+1313>, 0x62f60c <exec_byte_code+1315>,
          0x62f60e <exec_byte_code+1317>, 0x62f610 <exec_byte_code+1319>,
          0x62f610 <exec_byte_code+1319>, 0x62f619 <exec_byte_code+1328>,
          0x62f5d3 <exec_byte_code+1258>, 0x62fa8c <exec_byte_code+2467>,
---Type <return> to continue, or q <return> to quit---
          0x62fa8e <exec_byte_code+2469>, 0x62fa90 <exec_byte_code+2471>,
          0x62fa92 <exec_byte_code+2473>, 0x62fa94 <exec_byte_code+2475>,
          0x62fa94 <exec_byte_code+2475>, 0x62fad2 <exec_byte_code+2537>,
          0x62fa9d <exec_byte_code+2484>, 0x62fc85 <exec_byte_code+2972>,
          0x62fc87 <exec_byte_code+2974>, 0x62fc89 <exec_byte_code+2976>,
          0x62fc8b <exec_byte_code+2978>, 0x62fc8d <exec_byte_code+2980>,
          0x62fc8d <exec_byte_code+2980>, 0x62fc36 <exec_byte_code+2893>,
          0x62fc50 <exec_byte_code+2919>, 0x62fd4e <exec_byte_code+3173>,
          0x62fd50 <exec_byte_code+3175>, 0x62fd52 <exec_byte_code+3177>,
          0x62fd54 <exec_byte_code+3179>, 0x62fd56 <exec_byte_code+3181>,
          0x62fd56 <exec_byte_code+3181>, 0x62fcff <exec_byte_code+3094>,
          0x62fd19 <exec_byte_code+3120>, 0x62fe1a <exec_byte_code+3377>,
          0x62fe1c <exec_byte_code+3379>, 0x62fe1e <exec_byte_code+3381>,
          0x62fe20 <exec_byte_code+3383>, 0x62fe22 <exec_byte_code+3385>,
          0x62fe22 <exec_byte_code+3385>, 0x62fdcb <exec_byte_code+3298>,
          0x62fde5 <exec_byte_code+3324>, 0x633680 <exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x630e06 <exec_byte_code+7453>,
          0x630f3a <exec_byte_code+7761>, 0x630f97 <exec_byte_code+7854>,
          0x630ff4 <exec_byte_code+7947>, 0x631051 <exec_byte_code+8040>,
          0x62f8fd <exec_byte_code+2068>, 0x62f974 <exec_byte_code+2187>,
---Type <return> to continue, or q <return> to quit---
          0x6310c4 <exec_byte_code+8155>, 0x62f856 <exec_byte_code+1901>,
          0x62f9e4 <exec_byte_code+2299>, 0x631125 <exec_byte_code+8252>,
          0x631195 <exec_byte_code+8364>, 0x6311ec <exec_byte_code+8451>,
          0x631271 <exec_byte_code+8584>, 0x6312c8 <exec_byte_code+8671>,
          0x6313ac <exec_byte_code+8899>, 0x6313f9 <exec_byte_code+8976>,
          0x631469 <exec_byte_code+9088>, 0x6314f9 <exec_byte_code+9232>,
          0x631546 <exec_byte_code+9309>, 0x631593 <exec_byte_code+9386>,
          0x631603 <exec_byte_code+9498>, 0x631673 <exec_byte_code+9610>,
          0x6316e3 <exec_byte_code+9722>, 0x631773 <exec_byte_code+9866>,
          0x6317ca <exec_byte_code+9953>, 0x631821 <exec_byte_code+10040>,
          0x631905 <exec_byte_code+10268>, 0x63199b 
<exec_byte_code+10418>,
          0x631a31 <exec_byte_code+10568>, 0x631c9a 
<exec_byte_code+11185>,
          0x631d0a <exec_byte_code+11297>, 0x631d7a 
<exec_byte_code+11409>,
          0x631dea <exec_byte_code+11521>, 0x631e5a 
<exec_byte_code+11633>,
          0x631eb1 <exec_byte_code+11720>, 0x631f4b 
<exec_byte_code+11874>,
          0x631fa2 <exec_byte_code+11961>, 0x631ff9 
<exec_byte_code+12048>,
          0x632050 <exec_byte_code+12135>, 0x63216e 
<exec_byte_code+12421>,
          0x630a71 <exec_byte_code+6536>, 0x6321d1 <exec_byte_code+12520>,
          0x63221e <exec_byte_code+12597>, 0x6322fa 
<exec_byte_code+12817>,
          0x63235d <exec_byte_code+12916>, 0x6323c0 
<exec_byte_code+13015>,
          0x63240d <exec_byte_code+13092>, 0x632463 
<exec_byte_code+13178>,
          0x6324b9 <exec_byte_code+13264>, 0x632513 
<exec_byte_code+13354>,
          0x633680 <exec_byte_code+17815>, 0x63256a 
<exec_byte_code+13441>,
---Type <return> to continue, or q <return> to quit---
          0x6325b2 <exec_byte_code+13513>, 0x6325fa 
<exec_byte_code+13585>,
          0x632642 <exec_byte_code+13657>, 0x63268a 
<exec_byte_code+13729>,
          0x6326d2 <exec_byte_code+13801>, 0x630a71 <exec_byte_code+6536>,
          0x633680 <exec_byte_code+17815>, 0x63271f 
<exec_byte_code+13878>,
          0x632767 <exec_byte_code+13950>, 0x6327b4 
<exec_byte_code+14027>,
          0x632801 <exec_byte_code+14104>, 0x632871 
<exec_byte_code+14216>,
          0x6328e1 <exec_byte_code+14328>, 0x63292e 
<exec_byte_code+14405>,
          0x632b91 <exec_byte_code+15016>, 0x632c01 
<exec_byte_code+15128>,
          0x632c71 <exec_byte_code+15240>, 0x632ce1 
<exec_byte_code+15352>,
          0x632d29 <exec_byte_code+15424>, 0x633680 
<exec_byte_code+17815>,
          0x63099c <exec_byte_code+6323>, 0x62fee9 <exec_byte_code+3584>,
          0x62f717 <exec_byte_code+1582>, 0x62fffb <exec_byte_code+3858>,
          0x63013a <exec_byte_code+4177>, 0x630270 <exec_byte_code+4487>,
          0x630907 <exec_byte_code+6174>, 0x630963 <exec_byte_code+6266>,
          0x62fbdb <exec_byte_code+2802>, 0x630a2e <exec_byte_code+6469>,
          0x630aa7 <exec_byte_code+6590>, 0x630b46 <exec_byte_code+6749>,
          0x630b89 <exec_byte_code+6816>, 0x630bfb <exec_byte_code+6930>,
          0x630c4b <exec_byte_code+7010>, 0x630cdb <exec_byte_code+7154>,
          0x630d65 <exec_byte_code+7292>, 0x62fe9f <exec_byte_code+3510>,
          0x632d76 <exec_byte_code+15501>, 0x632e06 
<exec_byte_code+15645>,
          0x632e53 <exec_byte_code+15722>, 0x632ea0 
<exec_byte_code+15799>,
          0x632eed <exec_byte_code+15876>, 0x632f3a 
<exec_byte_code+15953>,
          0x632faa <exec_byte_code+16065>, 0x63301a 
<exec_byte_code+16177>,
---Type <return> to continue, or q <return> to quit---
          0x63308a <exec_byte_code+16289>, 0x6330fa 
<exec_byte_code+16401>,
          0x633285 <exec_byte_code+16796>, 0x6332f5 
<exec_byte_code+16908>,
          0x633365 <exec_byte_code+17020>, 0x6333b2 
<exec_byte_code+17097>,
          0x633422 <exec_byte_code+17209>, 0x63348c 
<exec_byte_code+17315>,
          0x6334f5 <exec_byte_code+17420>, 0x63355f 
<exec_byte_code+17526>,
          0x6320a7 <exec_byte_code+12222>, 0x6320fe 
<exec_byte_code+12309>,
          0x6335b6 <exec_byte_code+17613>, 0x633624 
<exec_byte_code+17723>,
          0x633680 <exec_byte_code+17815>, 0x6303a6 <exec_byte_code+4797>,
          0x63048b <exec_byte_code+5026>, 0x6305a9 <exec_byte_code+5312>,
          0x6306c7 <exec_byte_code+5598>, 0x6307e7 <exec_byte_code+5886>,
          0x63131f <exec_byte_code+8758>, 0x631878 <exec_byte_code+10127>,
          0x63226d <exec_byte_code+12676>, 0x63380f 
<exec_byte_code+18214>,
          0x633883 <exec_byte_code+18330>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x63391f 
<exec_byte_code+18486>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>, 0x633680 
<exec_byte_code+17815>,
          0x633680 <exec_byte_code+17815>,
          0x6339bd <exec_byte_code+18644> <repeats 64 times>}
        count = 31
        op = 1
        vectorp = 0xa34f60 <pure+1310272>
---Type <return> to continue, or q <return> to quit---
        stack = {
          pc = 0xb363a7 <pure+2364039> "\207",
          byte_string = 10702641,
          byte_string_start = 0xb3638f <pure+2364015> 
"\303\304\b\305\306$\210\t\203\025",
          constants = 10702677,
          next = 0x7fffffff7630
        }
        top = 0x7fffffff6da8
        result = 13014770
#11 0x00000000005e7609 in funcall_lambda (fun=10702541, nargs=2,
    arg_vector=0x7fffffff72b0) at eval.c:3010
        val = 13014770
        syms_left = 12886562
        next = 20635378
        lexenv = 12886562
        count = 29
        i = 2
        optional = true
        rest = false
#12 0x00000000005e6e09 in Ffuncall (nargs=3, args=0x7fffffff72a8)
    at eval.c:2827
        fun = 10702541
---Type <return> to continue, or q <return> to quit---
        original_fun = 16301234
        funcar = 20631474
        numargs = 2
        lisp_numargs = 12886610
        val = 140737488319120
        backtrace = {
          next = 0x7fffffff7760,
          function = 16301234,
          args = 0x7fffffff72b0,
          nargs = 2,
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff77c0
        i = 6072020
#13 0x000000000062fd90 in exec_byte_code (bytestr=10679993, 
vector=10680029,
    maxdepth=24, args_template=12886562, nargs=0, args=0x0) at 
bytecode.c:900
        targets = {0x633680 <exec_byte_code+17815>,
          0x63368f <exec_byte_code+17830>, 0x633691 
<exec_byte_code+17832>,
          0x633693 <exec_byte_code+17834>, 0x633695 
<exec_byte_code+17836>,
          0x633695 <exec_byte_code+17836>, 0x6336ff 
<exec_byte_code+17942>,
          0x633773 <exec_byte_code+18058>, 0x62f608 <exec_byte_code+1311>,
          0x62f60a <exec_byte_code+1313>, 0x62f60c <exec_byte_code+1315>,
          0x62f60e <exec_byte_code+1317>, 0x62f610 <exec_byte_code+1319>,
---Type <return> to continue, or q <return> to quit---

...

By the way, is there an easier way to compile without optimizations than 
assigning CFLAGS before running configure? I couldn't find it.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Tue, 19 Feb 2013 00:57:01 GMT) Full text and rfc822 format available.

Message #17 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Glenn Morris <rgm <at> gnu.org>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Tue, 19 Feb 2013 04:55:00 +0400
On 18.02.2013 23:35, Glenn Morris wrote:
> Dmitry Gutov wrote:
>
>> Emacs reliably crashes when [s]tealing a file that's opened in another
>> instance.
>
> The inevitable question: does this happen with older Emacs versions too?
> In particular pre 24.1?

I checked 24.2 and 23.4, and both crash in this situation. So that's not 
a recent regression.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Wed, 20 Feb 2013 19:33:01 GMT) Full text and rfc822 format available.

Message #20 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Wed, 20 Feb 2013 21:31:37 +0200
> Date: Tue, 19 Feb 2013 04:52:59 +0400
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> CC: 13743 <at> debbugs.gnu.org
> 
> On 18.02.2013 20:11, Eli Zaretskii wrote:
> > Can you recompile without optimizations, and show the backtrace from
> > that build?  Thanks.
> 
> Here you go:
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x0000000000653481 in add_properties (plist=32025878, i=0x0, 
> object=31976325)
>      at textprop.c:378
> 378	      for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
> (gdb) bt full
> #0  0x0000000000653481 in add_properties (plist=32025878, i=0x0,
>      object=31976325) at textprop.c:378
>          tail1 = 32025878
>          tail2 = 31873526
>          sym1 = 13125730
>          val1 = 12886562
>          changed = 0
>          found = 0
>          gcpro1 = {
>            next = 0x7fffffff6180,
>            var = 0x57dc19 <modify_region+481>,
>            nvars = 4295010134
>          }
>          gcpro2 = {
>            next = 0x7fffffff6180,
>            var = 0x57dc19 <modify_region+481>,
>            nvars = 4295010134
>          }
>          gcpro3 = {
>            next = 0x7fffffff6180,
>            var = 0x57dc19 <modify_region+481>,
>            nvars = 4295010134
>          }
> ---Type <return> to continue, or q <return> to quit---
> #1  0x0000000000655963 in Fadd_text_properties (start=4, end=3068,
>      properties=32025878, object=31976325) at textprop.c:1212
>          i = 0x0
>          unchanged = 0x7fffffffa568
>          s = 1
>          len = 558
>          modified = 19
>          gcpro1 = {
>            next = 0xa31e4d <pure+1297709>,
>            var = 0xa31e29 <pure+1297673>,
>            nvars = 579820584989
>          }
> #2  0x00000000006559e0 in Fput_text_property (start=4, end=3068,
>      property=13125730, value=12886562, object=12886562) at textprop.c:1229
> No locals.

Thanks.  This shows quite a different story.  But the backtrace alone
is not enough to figure out what goes wrong in this scenario and why,
at least not for me (and I don't see anyone else jumping in to dig
into this problem).  And since reproducing this involves tricky
non-default setup and an external package, I wonder if you could
provide a recipe starting with "emacs -Q" or with a minimal .emacs
init file, and show every command you type to reproduce the crash?

> By the way, is there an easier way to compile without optimizations than 
> assigning CFLAGS before running configure?

That's the canonical way, AFAIK.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Thu, 21 Feb 2013 05:18:01 GMT) Full text and rfc822 format available.

Message #23 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: 24.2.93; Segmentation fault when trying to [s]teal a file opened
	elsewhere
Date: Wed, 20 Feb 2013 21:16:25 -0800
> is there an easier way to compile without optimizations than 
> assigning CFLAGS before running configure?

Here's what I do:

make clean
make CFLAGS='-g3'

I suggest compiling with ENABLE_CHECKING, too, i.e.:

make clean
make CFLAGS='-g3 -DENABLE_CHECKING'




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Thu, 21 Feb 2013 07:05:01 GMT) Full text and rfc822 format available.

Message #26 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Thu, 21 Feb 2013 11:03:34 +0400
Paul Eggert <eggert <at> cs.ucla.edu> writes:
>> is there an easier way to compile without optimizations than 
>> assigning CFLAGS before running configure?
>
> Here's what I do:
>
> make clean
> make CFLAGS='-g3'
>
> I suggest compiling with ENABLE_CHECKING, too, i.e.:
>
> make clean
> make CFLAGS='-g3 -DENABLE_CHECKING'

Thanks, I'll do that.

I think the documentation in this area is lacking, I'll make a separate
bug report for that.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Thu, 21 Feb 2013 08:32:01 GMT) Full text and rfc822 format available.

Message #29 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;	Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Thu, 21 Feb 2013 12:30:24 +0400
[Message part 1 (text/plain, inline)]
On 20.02.2013 23:31, Eli Zaretskii wrote:
> Thanks.  This shows quite a different story.  But the backtrace alone
> is not enough to figure out what goes wrong in this scenario and why,
> at least not for me (and I don't see anyone else jumping in to dig
> into this problem).  And since reproducing this involves tricky

Thanks for looking into this, but I'd like to emphasize that so far I've 
only seen this bug on GNU/Linux.

> non-default setup and an external package, I wonder if you could
> provide a recipe starting with "emacs -Q" or with a minimal .emacs
> init file, and show every command you type to reproduce the crash?

Here's the recipe:

1. Have case2.html.erb saved somewhere (attached). The contents of the 
file are somewhat important, and also its length: if I delete the 
"sparta" line - no bug.

2. Check out this repository: https://github.com/purcell/mmm-mode

2. Open the test file in some Emacs instance, make a modification 
(prepend the first line with some spaces, for example). Don't save it.

3. Open a new Emacs instance (-Q). I'd recommend doing it with branch 
emacs-24, since trunk currently has some problems with font-lock 
(Bug#13751).

4. Paste the following into *scratch* and evaluate it:

(add-to-list 'load-path "path/to/mmm-mode")

(require 'mmm-auto)
(require 'mmm-erb)

(setq mmm-global-mode 'auto)

(mmm-add-mode-ext-class 'html-erb-mode "\\.html\\.erb\\'" 'erb)
(mmm-add-mode-ext-class 'html-erb-mode nil 'html-js)
(mmm-add-mode-ext-class 'html-erb-mode nil 'html-css)

(add-to-list 'auto-mode-alist '("\\.html\\.erb\\'" . html-erb-mode))

5. Open the test file, it will tell you that the file is locked.

6. Press `s' or `p'. See it crash.
[case2.html.erb (text/html, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Sat, 23 Feb 2013 03:39:06 GMT) Full text and rfc822 format available.

Message #32 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 13743 <at> debbugs.gnu.org
Subject: Re: 24.2.93; Segmentation fault when trying to [s]teal a file opened
	elsewhere
Date: Sat, 23 Feb 2013 07:37:09 +0400
On 21.02.2013 9:16, Paul Eggert wrote:
>> is there an easier way to compile without optimizations than
>> assigning CFLAGS before running configure?
>
> Here's what I do:
>
> make clean
> make CFLAGS='-g3'
>
> I suggest compiling with ENABLE_CHECKING, too, i.e.:
>
> make clean
> make CFLAGS='-g3 -DENABLE_CHECKING'

So, I compiled it with checking and it crashes with a failed assertion 
in the same place. Not sure how useful that is.

(gdb) xbacktrace
"put-text-property" (0xffff6af0)
"jit-lock-refontify" (0xffff7000)
"jit-lock-mode" (0xffff7530)
"jit-lock-register" (0xffff7a30)
"font-lock-turn-on-thing-lock" (0xffff7f40)
"font-lock-mode-internal" (0xffff8440)
"font-lock-default-function" (0xffff8940)
"font-lock-mode" (0xffff8e40)
"turn-on-font-lock" (0xffff9320)
"turn-on-font-lock-if-desired" (0xffff9810)
"global-font-lock-mode-enable-in-buffers" (0xffff9d98)
"run-hooks" (0xffff9e78)
"apply" (0xffffa020)
"run-mode-hooks" (0xffffa520)
"html-erb-mode" (0xffffaa30)
"mmm-update-mode-info" (0xffffaf30)
"mmm-mode-on" (0xffffb360)
"cond" (0xffffb620)
"mmm-mode-on-maybe" (0xffffb8d8)
"funcall" (0xffffb8d0)
"progn" (0xffffbab0)
"condition-case" (0xffffbdd0)
"while" (0xffffbfc0)
---Type <return> to continue, or q <return> to quit---
"let" (0xffffc230)
"progn" (0xffffc3d0)
"mmm-run-major-mode-hook" (0xffffc5b0)
"save-current-buffer" (0xffffc850)
"progn" (0xffffc9f0)
"if" (0xffffcb90)
"while" (0xffffcd80)
"let" (0xffffcff0)
"progn" (0xffffd190)
"mmm-check-changed-buffers" (0xffffd440)
(gdb) bt full
#0  terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at 
emacs.c:317
No locals.
#1  0x000000000069a6c2 in die (msg=0x8c9ac4 "assertion failed: i != 0",
    file=0x8c8fa8 "textprop.c", line=1173) at alloc.c:6440
No locals.
#2  0x0000000000768f5b in Fadd_text_properties (start=4, end=3068,
    properties=30489510, object=30971749) at textprop.c:1173
        i = 0x0
        unchanged = 0x7fffffffc130
        s = 1
        len = 558
        modified = 19
        gcpro1 = {
          next = 0xcac4d5 <pure+1643381>,
          var = 0xcac461 <pure+1643265>,
          nvars = 579820584989
        }
#3  0x00000000007692dd in Fput_text_property (start=4, end=3068,
    property=15947874, value=15708706, object=15708706) at textprop.c:1229
No locals.
#4  0x00000000006c4bc4 in Ffuncall (nargs=5, args=0x7fffffff6ae8)
    at eval.c:2794
        fun = 15085301
---Type <return> to continue, or q <return> to quit---
        original_fun = 15895858
        funcar = 7103860
        numargs = 4
        lisp_numargs = 140737488317136
        val = 19377766
        backtrace = {
          next = 0x7fffffff6fa0,
          function = 15895858,
          args = 0x7fffffff6af0,
          nargs = 4,
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff69f0
        i = 5
#5  0x00000000007360e5 in exec_byte_code (bytestr=13303329, 
vector=13303509,
    maxdepth=24, args_template=15708706, nargs=0, args=0x0) at 
bytecode.c:900
        targets = {0x739d87 <exec_byte_code+19583>,
          0x739d96 <exec_byte_code+19598>, 0x739d98 
<exec_byte_code+19600>,
          0x739d9a <exec_byte_code+19602>, 0x739d9c 
<exec_byte_code+19604>,
          0x739d9c <exec_byte_code+19604>, 0x739e06 
<exec_byte_code+19710>,
          0x739e7a <exec_byte_code+19826>, 0x73571e <exec_byte_code+1558>,
          0x735720 <exec_byte_code+1560>, 0x735722 <exec_byte_code+1562>,
          0x735724 <exec_byte_code+1564>, 0x735726 <exec_byte_code+1566>,
---Type <return> to continue, or q <return> to quit---
          0x735726 <exec_byte_code+1566>, 0x73572f <exec_byte_code+1575>,
          0x7356e9 <exec_byte_code+1505>, 0x735cd6 <exec_byte_code+3022>,
          0x735cd8 <exec_byte_code+3024>, 0x735cda <exec_byte_code+3026>,
          0x735cdc <exec_byte_code+3028>, 0x735cde <exec_byte_code+3030>,
          0x735cde <exec_byte_code+3030>, 0x735d1c <exec_byte_code+3092>,
          0x735ce7 <exec_byte_code+3039>, 0x735fda <exec_byte_code+3794>,
          0x735fdc <exec_byte_code+3796>, 0x735fde <exec_byte_code+3798>,
          0x735fe0 <exec_byte_code+3800>, 0x735fe2 <exec_byte_code+3802>,
          0x735fe2 <exec_byte_code+3802>, 0x735f8b <exec_byte_code+3715>,
          0x735fa5 <exec_byte_code+3741>, 0x7360a3 <exec_byte_code+3995>,
          0x7360a5 <exec_byte_code+3997>, 0x7360a7 <exec_byte_code+3999>,
          0x7360a9 <exec_byte_code+4001>, 0x7360ab <exec_byte_code+4003>,
          0x7360ab <exec_byte_code+4003>, 0x736054 <exec_byte_code+3916>,
          0x73606e <exec_byte_code+3942>, 0x73616f <exec_byte_code+4199>,
          0x736171 <exec_byte_code+4201>, 0x736173 <exec_byte_code+4203>,
          0x736175 <exec_byte_code+4205>, 0x736177 <exec_byte_code+4207>,
          0x736177 <exec_byte_code+4207>, 0x736120 <exec_byte_code+4120>,
          0x73613a <exec_byte_code+4146>, 0x739d87 <exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x73718f <exec_byte_code+8327>,
          0x737325 <exec_byte_code+8733>, 0x737382 <exec_byte_code+8826>,
---Type <return> to continue, or q <return> to quit---
          0x7373df <exec_byte_code+8919>, 0x73743c <exec_byte_code+9012>,
          0x735b16 <exec_byte_code+2574>, 0x735b8d <exec_byte_code+2693>,
          0x7374af <exec_byte_code+9127>, 0x735a3e <exec_byte_code+2358>,
          0x735bfd <exec_byte_code+2805>, 0x737510 <exec_byte_code+9224>,
          0x737580 <exec_byte_code+9336>, 0x7375d7 <exec_byte_code+9423>,
          0x73765c <exec_byte_code+9556>, 0x7376b3 <exec_byte_code+9643>,
          0x737797 <exec_byte_code+9871>, 0x7377e4 <exec_byte_code+9948>,
          0x737854 <exec_byte_code+10060>, 0x7378e4 
<exec_byte_code+10204>,
          0x737931 <exec_byte_code+10281>, 0x73797e 
<exec_byte_code+10358>,
          0x7379ee <exec_byte_code+10470>, 0x737a5e 
<exec_byte_code+10582>,
          0x737ace <exec_byte_code+10694>, 0x737b5e 
<exec_byte_code+10838>,
          0x737bb5 <exec_byte_code+10925>, 0x737c0c 
<exec_byte_code+11012>,
          0x737cf0 <exec_byte_code+11240>, 0x737d86 
<exec_byte_code+11390>,
          0x737e1c <exec_byte_code+11540>, 0x738149 
<exec_byte_code+12353>,
          0x7381b9 <exec_byte_code+12465>, 0x738229 
<exec_byte_code+12577>,
          0x738299 <exec_byte_code+12689>, 0x738309 
<exec_byte_code+12801>,
          0x738360 <exec_byte_code+12888>, 0x7383fa 
<exec_byte_code+13042>,
          0x738451 <exec_byte_code+13129>, 0x7384a8 
<exec_byte_code+13216>,
          0x7384ff <exec_byte_code+13303>, 0x73861d 
<exec_byte_code+13589>,
          0x736dc6 <exec_byte_code+7358>, 0x738680 <exec_byte_code+13688>,
          0x7386cd <exec_byte_code+13765>, 0x7387a9 
<exec_byte_code+13985>,
          0x73880c <exec_byte_code+14084>, 0x73886f 
<exec_byte_code+14183>,
          0x7388bc <exec_byte_code+14260>, 0x738912 
<exec_byte_code+14346>,
---Type <return> to continue, or q <return> to quit---
          0x738968 <exec_byte_code+14432>, 0x7389c2 
<exec_byte_code+14522>,
          0x739d87 <exec_byte_code+19583>, 0x738a19 
<exec_byte_code+14609>,
          0x738a61 <exec_byte_code+14681>, 0x738aa9 
<exec_byte_code+14753>,
          0x738af1 <exec_byte_code+14825>, 0x738b39 
<exec_byte_code+14897>,
          0x738b81 <exec_byte_code+14969>, 0x736dc6 <exec_byte_code+7358>,
          0x739d87 <exec_byte_code+19583>, 0x738bce 
<exec_byte_code+15046>,
          0x738c16 <exec_byte_code+15118>, 0x738c63 
<exec_byte_code+15195>,
          0x738cb0 <exec_byte_code+15272>, 0x738d20 
<exec_byte_code+15384>,
          0x738d90 <exec_byte_code+15496>, 0x738ddd 
<exec_byte_code+15573>,
          0x7391da <exec_byte_code+16594>, 0x73924a 
<exec_byte_code+16706>,
          0x7392ba <exec_byte_code+16818>, 0x73932a 
<exec_byte_code+16930>,
          0x739372 <exec_byte_code+17002>, 0x739d87 
<exec_byte_code+19583>,
          0x736cf1 <exec_byte_code+7145>, 0x73623e <exec_byte_code+4406>,
          0x7358ff <exec_byte_code+2039>, 0x736350 <exec_byte_code+4680>,
          0x73648f <exec_byte_code+4999>, 0x7365c5 <exec_byte_code+5309>,
          0x736c5c <exec_byte_code+6996>, 0x736cb8 <exec_byte_code+7088>,
          0x735f30 <exec_byte_code+3624>, 0x736d83 <exec_byte_code+7291>,
          0x736dfc <exec_byte_code+7412>, 0x736e9b <exec_byte_code+7571>,
          0x736ede <exec_byte_code+7638>, 0x736f50 <exec_byte_code+7752>,
          0x736fa0 <exec_byte_code+7832>, 0x737030 <exec_byte_code+7976>,
          0x7370ee <exec_byte_code+8166>, 0x7361f4 <exec_byte_code+4332>,
          0x7393bf <exec_byte_code+17079>, 0x73944f 
<exec_byte_code+17223>,
          0x73949c <exec_byte_code+17300>, 0x7394e9 
<exec_byte_code+17377>,
---Type <return> to continue, or q <return> to quit---
          0x739536 <exec_byte_code+17454>, 0x739583 
<exec_byte_code+17531>,
          0x7395f3 <exec_byte_code+17643>, 0x739663 
<exec_byte_code+17755>,
          0x7396d3 <exec_byte_code+17867>, 0x739743 
<exec_byte_code+17979>,
          0x739930 <exec_byte_code+18472>, 0x7399a0 
<exec_byte_code+18584>,
          0x739a10 <exec_byte_code+18696>, 0x739a5d 
<exec_byte_code+18773>,
          0x739acd <exec_byte_code+18885>, 0x739b37 
<exec_byte_code+18991>,
          0x739bce <exec_byte_code+19142>, 0x739c66 
<exec_byte_code+19294>,
          0x738556 <exec_byte_code+13390>, 0x7385ad 
<exec_byte_code+13477>,
          0x739cbd <exec_byte_code+19381>, 0x739d2b 
<exec_byte_code+19491>,
          0x739d87 <exec_byte_code+19583>, 0x7366fb <exec_byte_code+5619>,
          0x7367e0 <exec_byte_code+5848>, 0x7368fe <exec_byte_code+6134>,
          0x736a1c <exec_byte_code+6420>, 0x736b3c <exec_byte_code+6708>,
          0x73770a <exec_byte_code+9730>, 0x737c63 <exec_byte_code+11099>,
          0x73871c <exec_byte_code+13844>, 0x739f16 
<exec_byte_code+19982>,
          0x739f8a <exec_byte_code+20098>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x73a026 
<exec_byte_code+20254>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>,
          0x73a0c4 <exec_byte_code+20412> <repeats 64 times>}
        count = 34
---Type <return> to continue, or q <return> to quit---
        op = 4
        vectorp = 0xcafee0 <pure+1658240>
        stack = {
          pc = 0xde6949 <pure+2930665> ".\n\207",
          byte_string = 13303329,
          byte_string_start = 0xde6921 <pure+2930625> "\306\030\307 
\031\032\033\306\034\035\036\f\310\036\r\214~\210\312\016\016\206\037",
          constants = 13303509,
          next = 0x7fffffff73a0
        }
        top = 0x7fffffff6ae8
        result = 140737488317664
#6  0x00000000006c5a29 in funcall_lambda (fun=13303277, nargs=0,
    arg_vector=0x7fffffff7000) at eval.c:3010
        val = 19942912
        syms_left = 15708706
        next = 19040098
        lexenv = 15708706
        count = 32
        i = 0
        optional = true
        rest = false
#7  0x00000000006c4e06 in Ffuncall (nargs=1, args=0x7fffffff6ff8)
---Type <return> to continue, or q <return> to quit---
    at eval.c:2827
        fun = 13303277
        original_fun = 23441314
        funcar = 23441122
        numargs = 0
        lisp_numargs = 15708754
        val = 140737488318432
        backtrace = {
          next = 0x7fffffff74d0,
          function = 23441314,
          args = 0x7fffffff7000,
          nargs = 0,
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff7530
        i = 6940436
#8  0x00000000007360e5 in exec_byte_code (bytestr=13301729, 
vector=13302021,
    maxdepth=44, args_template=15708706, nargs=0, args=0x0) at 
bytecode.c:900
        targets = {0x739d87 <exec_byte_code+19583>,
          0x739d96 <exec_byte_code+19598>, 0x739d98 
<exec_byte_code+19600>,
          0x739d9a <exec_byte_code+19602>, 0x739d9c 
<exec_byte_code+19604>,
          0x739d9c <exec_byte_code+19604>, 0x739e06 
<exec_byte_code+19710>,
          0x739e7a <exec_byte_code+19826>, 0x73571e <exec_byte_code+1558>,
---Type <return> to continue, or q <return> to quit---
          0x735720 <exec_byte_code+1560>, 0x735722 <exec_byte_code+1562>,
          0x735724 <exec_byte_code+1564>, 0x735726 <exec_byte_code+1566>,
          0x735726 <exec_byte_code+1566>, 0x73572f <exec_byte_code+1575>,
          0x7356e9 <exec_byte_code+1505>, 0x735cd6 <exec_byte_code+3022>,
          0x735cd8 <exec_byte_code+3024>, 0x735cda <exec_byte_code+3026>,
          0x735cdc <exec_byte_code+3028>, 0x735cde <exec_byte_code+3030>,
          0x735cde <exec_byte_code+3030>, 0x735d1c <exec_byte_code+3092>,
          0x735ce7 <exec_byte_code+3039>, 0x735fda <exec_byte_code+3794>,
          0x735fdc <exec_byte_code+3796>, 0x735fde <exec_byte_code+3798>,
          0x735fe0 <exec_byte_code+3800>, 0x735fe2 <exec_byte_code+3802>,
          0x735fe2 <exec_byte_code+3802>, 0x735f8b <exec_byte_code+3715>,
          0x735fa5 <exec_byte_code+3741>, 0x7360a3 <exec_byte_code+3995>,
          0x7360a5 <exec_byte_code+3997>, 0x7360a7 <exec_byte_code+3999>,
          0x7360a9 <exec_byte_code+4001>, 0x7360ab <exec_byte_code+4003>,
          0x7360ab <exec_byte_code+4003>, 0x736054 <exec_byte_code+3916>,
          0x73606e <exec_byte_code+3942>, 0x73616f <exec_byte_code+4199>,
          0x736171 <exec_byte_code+4201>, 0x736173 <exec_byte_code+4203>,
          0x736175 <exec_byte_code+4205>, 0x736177 <exec_byte_code+4207>,
          0x736177 <exec_byte_code+4207>, 0x736120 <exec_byte_code+4120>,
          0x73613a <exec_byte_code+4146>, 0x739d87 <exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
---Type <return> to continue, or q <return> to quit---
          0x739d87 <exec_byte_code+19583>, 0x73718f <exec_byte_code+8327>,
          0x737325 <exec_byte_code+8733>, 0x737382 <exec_byte_code+8826>,
          0x7373df <exec_byte_code+8919>, 0x73743c <exec_byte_code+9012>,
          0x735b16 <exec_byte_code+2574>, 0x735b8d <exec_byte_code+2693>,
          0x7374af <exec_byte_code+9127>, 0x735a3e <exec_byte_code+2358>,
          0x735bfd <exec_byte_code+2805>, 0x737510 <exec_byte_code+9224>,
          0x737580 <exec_byte_code+9336>, 0x7375d7 <exec_byte_code+9423>,
          0x73765c <exec_byte_code+9556>, 0x7376b3 <exec_byte_code+9643>,
          0x737797 <exec_byte_code+9871>, 0x7377e4 <exec_byte_code+9948>,
          0x737854 <exec_byte_code+10060>, 0x7378e4 
<exec_byte_code+10204>,
          0x737931 <exec_byte_code+10281>, 0x73797e 
<exec_byte_code+10358>,
          0x7379ee <exec_byte_code+10470>, 0x737a5e 
<exec_byte_code+10582>,
          0x737ace <exec_byte_code+10694>, 0x737b5e 
<exec_byte_code+10838>,
          0x737bb5 <exec_byte_code+10925>, 0x737c0c 
<exec_byte_code+11012>,
          0x737cf0 <exec_byte_code+11240>, 0x737d86 
<exec_byte_code+11390>,
          0x737e1c <exec_byte_code+11540>, 0x738149 
<exec_byte_code+12353>,
          0x7381b9 <exec_byte_code+12465>, 0x738229 
<exec_byte_code+12577>,
          0x738299 <exec_byte_code+12689>, 0x738309 
<exec_byte_code+12801>,
          0x738360 <exec_byte_code+12888>, 0x7383fa 
<exec_byte_code+13042>,
          0x738451 <exec_byte_code+13129>, 0x7384a8 
<exec_byte_code+13216>,
          0x7384ff <exec_byte_code+13303>, 0x73861d 
<exec_byte_code+13589>,
          0x736dc6 <exec_byte_code+7358>, 0x738680 <exec_byte_code+13688>,
          0x7386cd <exec_byte_code+13765>, 0x7387a9 
<exec_byte_code+13985>,
---Type <return> to continue, or q <return> to quit---
          0x73880c <exec_byte_code+14084>, 0x73886f 
<exec_byte_code+14183>,
          0x7388bc <exec_byte_code+14260>, 0x738912 
<exec_byte_code+14346>,
          0x738968 <exec_byte_code+14432>, 0x7389c2 
<exec_byte_code+14522>,
          0x739d87 <exec_byte_code+19583>, 0x738a19 
<exec_byte_code+14609>,
          0x738a61 <exec_byte_code+14681>, 0x738aa9 
<exec_byte_code+14753>,
          0x738af1 <exec_byte_code+14825>, 0x738b39 
<exec_byte_code+14897>,
          0x738b81 <exec_byte_code+14969>, 0x736dc6 <exec_byte_code+7358>,
          0x739d87 <exec_byte_code+19583>, 0x738bce 
<exec_byte_code+15046>,
          0x738c16 <exec_byte_code+15118>, 0x738c63 
<exec_byte_code+15195>,
          0x738cb0 <exec_byte_code+15272>, 0x738d20 
<exec_byte_code+15384>,
          0x738d90 <exec_byte_code+15496>, 0x738ddd 
<exec_byte_code+15573>,
          0x7391da <exec_byte_code+16594>, 0x73924a 
<exec_byte_code+16706>,
          0x7392ba <exec_byte_code+16818>, 0x73932a 
<exec_byte_code+16930>,
          0x739372 <exec_byte_code+17002>, 0x739d87 
<exec_byte_code+19583>,
          0x736cf1 <exec_byte_code+7145>, 0x73623e <exec_byte_code+4406>,
          0x7358ff <exec_byte_code+2039>, 0x736350 <exec_byte_code+4680>,
          0x73648f <exec_byte_code+4999>, 0x7365c5 <exec_byte_code+5309>,
          0x736c5c <exec_byte_code+6996>, 0x736cb8 <exec_byte_code+7088>,
          0x735f30 <exec_byte_code+3624>, 0x736d83 <exec_byte_code+7291>,
          0x736dfc <exec_byte_code+7412>, 0x736e9b <exec_byte_code+7571>,
          0x736ede <exec_byte_code+7638>, 0x736f50 <exec_byte_code+7752>,
          0x736fa0 <exec_byte_code+7832>, 0x737030 <exec_byte_code+7976>,
          0x7370ee <exec_byte_code+8166>, 0x7361f4 <exec_byte_code+4332>,
---Type <return> to continue, or q <return> to quit---
          0x7393bf <exec_byte_code+17079>, 0x73944f 
<exec_byte_code+17223>,
          0x73949c <exec_byte_code+17300>, 0x7394e9 
<exec_byte_code+17377>,
          0x739536 <exec_byte_code+17454>, 0x739583 
<exec_byte_code+17531>,
          0x7395f3 <exec_byte_code+17643>, 0x739663 
<exec_byte_code+17755>,
          0x7396d3 <exec_byte_code+17867>, 0x739743 
<exec_byte_code+17979>,
          0x739930 <exec_byte_code+18472>, 0x7399a0 
<exec_byte_code+18584>,
          0x739a10 <exec_byte_code+18696>, 0x739a5d 
<exec_byte_code+18773>,
          0x739acd <exec_byte_code+18885>, 0x739b37 
<exec_byte_code+18991>,
          0x739bce <exec_byte_code+19142>, 0x739c66 
<exec_byte_code+19294>,
          0x738556 <exec_byte_code+13390>, 0x7385ad 
<exec_byte_code+13477>,
          0x739cbd <exec_byte_code+19381>, 0x739d2b 
<exec_byte_code+19491>,
          0x739d87 <exec_byte_code+19583>, 0x7366fb <exec_byte_code+5619>,
          0x7367e0 <exec_byte_code+5848>, 0x7368fe <exec_byte_code+6134>,
          0x736a1c <exec_byte_code+6420>, 0x736b3c <exec_byte_code+6708>,
          0x73770a <exec_byte_code+9730>, 0x737c63 <exec_byte_code+11099>,
          0x73871c <exec_byte_code+13844>, 0x739f16 
<exec_byte_code+19982>,
          0x739f8a <exec_byte_code+20098>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x73a026 
<exec_byte_code+20254>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>,
---Type <return> to continue, or q <return> to quit---
          0x73a0c4 <exec_byte_code+20412> <repeats 64 times>}
        count = 32
        op = 0
        vectorp = 0xcaf910 <pure+1656752>
        stack = {
          pc = 0xde69af <pure+2930767> "\210\n\203\027",
          byte_string = 13301729,
          byte_string_start = 0xde69a7 <pure+2930759> "\b\211\021\203j",
          constants = 13302021,
          next = 0x7fffffff78a0
        }
        top = 0x7fffffff6ff8
        result = 30500326
#9  0x00000000006c5a29 in funcall_lambda (fun=13301677, nargs=1,
    arg_vector=0x7fffffff7530) at eval.c:3010
        val = 30500326
        syms_left = 15708706
        next = 19011106
        lexenv = 15708706
        count = 31
        i = 1
        optional = false
        rest = false
---Type <return> to continue, or q <return> to quit---
#10 0x00000000006c4e06 in Ffuncall (nargs=2, args=0x7fffffff7528)
    at eval.c:2827
        fun = 13301677
        original_fun = 23441122
        funcar = 23445122
        numargs = 1
        lisp_numargs = 15708754
        val = 140737488319760
        backtrace = {
          next = 0x7fffffff79d0,
          function = 23441122,
          args = 0x7fffffff7530,
          nargs = 1,
          debug_on_exit = 0
        }
        internal_args = 0x7fffffff7a30
        i = 6940436
#11 0x00000000007360e5 in exec_byte_code (bytestr=13302705, 
vector=13302829,
    maxdepth=20, args_template=15708706, nargs=0, args=0x0) at 
bytecode.c:900
        targets = {0x739d87 <exec_byte_code+19583>,
          0x739d96 <exec_byte_code+19598>, 0x739d98 
<exec_byte_code+19600>,
          0x739d9a <exec_byte_code+19602>, 0x739d9c 
<exec_byte_code+19604>,
          0x739d9c <exec_byte_code+19604>, 0x739e06 
<exec_byte_code+19710>,
---Type <return> to continue, or q <return> to quit---
          0x739e7a <exec_byte_code+19826>, 0x73571e <exec_byte_code+1558>,
          0x735720 <exec_byte_code+1560>, 0x735722 <exec_byte_code+1562>,
          0x735724 <exec_byte_code+1564>, 0x735726 <exec_byte_code+1566>,
          0x735726 <exec_byte_code+1566>, 0x73572f <exec_byte_code+1575>,
          0x7356e9 <exec_byte_code+1505>, 0x735cd6 <exec_byte_code+3022>,
          0x735cd8 <exec_byte_code+3024>, 0x735cda <exec_byte_code+3026>,
          0x735cdc <exec_byte_code+3028>, 0x735cde <exec_byte_code+3030>,
          0x735cde <exec_byte_code+3030>, 0x735d1c <exec_byte_code+3092>,
          0x735ce7 <exec_byte_code+3039>, 0x735fda <exec_byte_code+3794>,
          0x735fdc <exec_byte_code+3796>, 0x735fde <exec_byte_code+3798>,
          0x735fe0 <exec_byte_code+3800>, 0x735fe2 <exec_byte_code+3802>,
          0x735fe2 <exec_byte_code+3802>, 0x735f8b <exec_byte_code+3715>,
          0x735fa5 <exec_byte_code+3741>, 0x7360a3 <exec_byte_code+3995>,
          0x7360a5 <exec_byte_code+3997>, 0x7360a7 <exec_byte_code+3999>,
          0x7360a9 <exec_byte_code+4001>, 0x7360ab <exec_byte_code+4003>,
          0x7360ab <exec_byte_code+4003>, 0x736054 <exec_byte_code+3916>,
          0x73606e <exec_byte_code+3942>, 0x73616f <exec_byte_code+4199>,
          0x736171 <exec_byte_code+4201>, 0x736173 <exec_byte_code+4203>,
          0x736175 <exec_byte_code+4205>, 0x736177 <exec_byte_code+4207>,
          0x736177 <exec_byte_code+4207>, 0x736120 <exec_byte_code+4120>,
          0x73613a <exec_byte_code+4146>, 0x739d87 <exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
---Type <return> to continue, or q <return> to quit---
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x73718f <exec_byte_code+8327>,
          0x737325 <exec_byte_code+8733>, 0x737382 <exec_byte_code+8826>,
          0x7373df <exec_byte_code+8919>, 0x73743c <exec_byte_code+9012>,
          0x735b16 <exec_byte_code+2574>, 0x735b8d <exec_byte_code+2693>,
          0x7374af <exec_byte_code+9127>, 0x735a3e <exec_byte_code+2358>,
          0x735bfd <exec_byte_code+2805>, 0x737510 <exec_byte_code+9224>,
          0x737580 <exec_byte_code+9336>, 0x7375d7 <exec_byte_code+9423>,
          0x73765c <exec_byte_code+9556>, 0x7376b3 <exec_byte_code+9643>,
          0x737797 <exec_byte_code+9871>, 0x7377e4 <exec_byte_code+9948>,
          0x737854 <exec_byte_code+10060>, 0x7378e4 
<exec_byte_code+10204>,
          0x737931 <exec_byte_code+10281>, 0x73797e 
<exec_byte_code+10358>,
          0x7379ee <exec_byte_code+10470>, 0x737a5e 
<exec_byte_code+10582>,
          0x737ace <exec_byte_code+10694>, 0x737b5e 
<exec_byte_code+10838>,
          0x737bb5 <exec_byte_code+10925>, 0x737c0c 
<exec_byte_code+11012>,
          0x737cf0 <exec_byte_code+11240>, 0x737d86 
<exec_byte_code+11390>,
          0x737e1c <exec_byte_code+11540>, 0x738149 
<exec_byte_code+12353>,
          0x7381b9 <exec_byte_code+12465>, 0x738229 
<exec_byte_code+12577>,
          0x738299 <exec_byte_code+12689>, 0x738309 
<exec_byte_code+12801>,
          0x738360 <exec_byte_code+12888>, 0x7383fa 
<exec_byte_code+13042>,
          0x738451 <exec_byte_code+13129>, 0x7384a8 
<exec_byte_code+13216>,
          0x7384ff <exec_byte_code+13303>, 0x73861d 
<exec_byte_code+13589>,
          0x736dc6 <exec_byte_code+7358>, 0x738680 <exec_byte_code+13688>,
---Type <return> to continue, or q <return> to quit---
          0x7386cd <exec_byte_code+13765>, 0x7387a9 
<exec_byte_code+13985>,
          0x73880c <exec_byte_code+14084>, 0x73886f 
<exec_byte_code+14183>,
          0x7388bc <exec_byte_code+14260>, 0x738912 
<exec_byte_code+14346>,
          0x738968 <exec_byte_code+14432>, 0x7389c2 
<exec_byte_code+14522>,
          0x739d87 <exec_byte_code+19583>, 0x738a19 
<exec_byte_code+14609>,
          0x738a61 <exec_byte_code+14681>, 0x738aa9 
<exec_byte_code+14753>,
          0x738af1 <exec_byte_code+14825>, 0x738b39 
<exec_byte_code+14897>,
          0x738b81 <exec_byte_code+14969>, 0x736dc6 <exec_byte_code+7358>,
          0x739d87 <exec_byte_code+19583>, 0x738bce 
<exec_byte_code+15046>,
          0x738c16 <exec_byte_code+15118>, 0x738c63 
<exec_byte_code+15195>,
          0x738cb0 <exec_byte_code+15272>, 0x738d20 
<exec_byte_code+15384>,
          0x738d90 <exec_byte_code+15496>, 0x738ddd 
<exec_byte_code+15573>,
          0x7391da <exec_byte_code+16594>, 0x73924a 
<exec_byte_code+16706>,
          0x7392ba <exec_byte_code+16818>, 0x73932a 
<exec_byte_code+16930>,
          0x739372 <exec_byte_code+17002>, 0x739d87 
<exec_byte_code+19583>,
          0x736cf1 <exec_byte_code+7145>, 0x73623e <exec_byte_code+4406>,
          0x7358ff <exec_byte_code+2039>, 0x736350 <exec_byte_code+4680>,
          0x73648f <exec_byte_code+4999>, 0x7365c5 <exec_byte_code+5309>,
          0x736c5c <exec_byte_code+6996>, 0x736cb8 <exec_byte_code+7088>,
          0x735f30 <exec_byte_code+3624>, 0x736d83 <exec_byte_code+7291>,
          0x736dfc <exec_byte_code+7412>, 0x736e9b <exec_byte_code+7571>,
          0x736ede <exec_byte_code+7638>, 0x736f50 <exec_byte_code+7752>,
          0x736fa0 <exec_byte_code+7832>, 0x737030 <exec_byte_code+7976>,
---Type <return> to continue, or q <return> to quit---
          0x7370ee <exec_byte_code+8166>, 0x7361f4 <exec_byte_code+4332>,
          0x7393bf <exec_byte_code+17079>, 0x73944f 
<exec_byte_code+17223>,
          0x73949c <exec_byte_code+17300>, 0x7394e9 
<exec_byte_code+17377>,
          0x739536 <exec_byte_code+17454>, 0x739583 
<exec_byte_code+17531>,
          0x7395f3 <exec_byte_code+17643>, 0x739663 
<exec_byte_code+17755>,
          0x7396d3 <exec_byte_code+17867>, 0x739743 
<exec_byte_code+17979>,
          0x739930 <exec_byte_code+18472>, 0x7399a0 
<exec_byte_code+18584>,
          0x739a10 <exec_byte_code+18696>, 0x739a5d 
<exec_byte_code+18773>,
          0x739acd <exec_byte_code+18885>, 0x739b37 
<exec_byte_code+18991>,
          0x739bce <exec_byte_code+19142>, 0x739c66 
<exec_byte_code+19294>,
          0x738556 <exec_byte_code+13390>, 0x7385ad 
<exec_byte_code+13477>,
          0x739cbd <exec_byte_code+19381>, 0x739d2b 
<exec_byte_code+19491>,
          0x739d87 <exec_byte_code+19583>, 0x7366fb <exec_byte_code+5619>,
          0x7367e0 <exec_byte_code+5848>, 0x7368fe <exec_byte_code+6134>,
          0x736a1c <exec_byte_code+6420>, 0x736b3c <exec_byte_code+6708>,
          0x73770a <exec_byte_code+9730>, 0x737c63 <exec_byte_code+11099>,
          0x73871c <exec_byte_code+13844>, 0x739f16 
<exec_byte_code+19982>,
          0x739f8a <exec_byte_code+20098>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x73a026 
<exec_byte_code+20254>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
          0x739d87 <exec_byte_code+19583>, 0x739d87 
<exec_byte_code+19583>,
---Type <return> to continue, or q <return> to quit---




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Sat, 23 Feb 2013 15:13:01 GMT) Full text and rfc822 format available.

Message #35 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 13743 <at> debbugs.gnu.org
Subject: Re: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Sat, 23 Feb 2013 17:10:47 +0200
> Date: Sat, 23 Feb 2013 07:37:09 +0400
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> CC: 13743 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
> 
> > make clean
> > make CFLAGS='-g3 -DENABLE_CHECKING'
> 
> So, I compiled it with checking and it crashes with a failed assertion 
> in the same place. Not sure how useful that is.

It catches the problem one step before we segfault:

> #1  0x000000000069a6c2 in die (msg=0x8c9ac4 "assertion failed: i != 0",
>      file=0x8c8fa8 "textprop.c", line=1173) at alloc.c:6440
> No locals.
> #2  0x0000000000768f5b in Fadd_text_properties (start=4, end=3068,
>      properties=30489510, object=30971749) at textprop.c:1173
>          i = 0x0
>          unchanged = 0x7fffffffc130
>          s = 1
>          len = 558
>          modified = 19
>          gcpro1 = {
>            next = 0xcac4d5 <pure+1643381>,
>            var = 0xcac461 <pure+1643265>,
>            nvars = 579820584989
>          }

This is where it aborts:

  if (BUFFERP (object))
    modify_region (XBUFFER (object), XINT (start), XINT (end), 1);

  /* We are at the beginning of interval I, with LEN chars to scan.  */
  for (;;)
    {
      eassert (i != 0);  <<<<<<<<<<<<<<<<<<<<<<<<<

      if (LENGTH (i) >= len)


Anyway, this problem happens because add-text-properties is re-entered
from the call to modify_region shown above.  That function calls
prepare_to_modify_buffer, which calls lock_file, which calls
ask-user-about-lock, which enters redisplay, which tries to fontify
the current buffer, which calls add-text-properties again.  This
recursive call modifies the interval tree for the current buffer, so
when modify_region returns, the interval whose pointer 'i' we computed
before calling modify_region is no longer correct (the interval
structure to which 'i' points has changed), and the rest is history.

I attach below the backtrace that clearly shows the recursive
invocation of add-text-properties.

I can fix this particular problem with this simple patch:

=== modified file 'src/textprop.c'
--- src/textprop.c	2013-01-02 16:13:04 +0000
+++ src/textprop.c	2013-02-23 14:56:45 +0000
@@ -1175,7 +1175,24 @@ Return t if any property value actually 
     }
 
   if (BUFFERP (object))
-    modify_region (object, start, end);
+    {
+      ptrdiff_t prev_total_length = i->total_length;
+      ptrdiff_t prev_pos = i->position;
+
+      modify_region (object, start, end);
+      /* If someone called us, as a side effect of modify_region, and
+	 changed the intervals behind our back (could happen if
+	 lock_file, called by prepare_to_modify_buffer, triggers
+	 redisplay and that calls add-text-properties again in the
+	 same buffer), we cannot continue with I.  So re-invoke
+	 ourselves, to have the intervals evaluated anew.  */
+      if (i->total_length != prev_total_length
+	  || i->position != prev_pos)
+        {
+	  UNGCPRO;
+	  return Fadd_text_properties (start, end, properties, object);
+        }
+    }
 
   /* We are at the beginning of interval I, with LEN chars to scan.  */
   for (;;)


However, I'm not sure this is the right or the best way.  If it is, it
will probably be prudent to add some protection against infinite
recursion here.

Here's the backtrace from the recursive call to add-text-properties.
It ends at rotate_right because I caught this by setting a watchpoint
at i->total_length, and the watchpoint fired when that was changed.

#0  rotate_right (interval=0x1693738) at intervals.c:374
#1  0x0000000000732aa5 in balance_an_interval (i=0x1693738) at intervals.c:448
#2  0x0000000000732c27 in balance_possible_root_interval (interval=0x1693738)
    at intervals.c:484
#3  0x000000000073311f in split_interval_left (interval=0x1693738, offset=506)
    at intervals.c:617
#4  0x000000000073d713 in Fadd_text_properties (start=4, end=2028,
    properties=22501590, object=23493237) at textprop.c:1212
#5  0x000000000073d89b in Fput_text_property (start=4, end=2028,
    property=15624258, value=15399602, object=15399554) at textprop.c:1239
#6  0x000000000069c49b in Ffuncall (nargs=5, args=0x7fffffff02c8)
    at eval.c:2691
#7  0x000000000070bdfd in exec_byte_code (bytestr=12996377, vector=12996685,
    maxdepth=32, args_template=15399554, nargs=0, args=0x0) at bytecode.c:898
#8  0x000000000069d353 in funcall_lambda (fun=12996333, nargs=2,
    arg_vector=0xc6504d <pure+1601741>) at eval.c:2907
#9  0x000000000069c6e9 in Ffuncall (nargs=3, args=0x7fffffff07c8)
    at eval.c:2724
#10 0x000000000070bdfd in exec_byte_code (bytestr=12995609, vector=12995837,
    maxdepth=40, args_template=15399554, nargs=0, args=0x0) at bytecode.c:898
#11 0x000000000069d353 in funcall_lambda (fun=12995565, nargs=1,
    arg_vector=0xc64cfd <pure+1600893>) at eval.c:2907
#12 0x000000000069c6e9 in Ffuncall (nargs=2, args=0x7fffffff0e70)
    at eval.c:2724
#13 0x0000000000697a3c in internal_condition_case_n (bfun=0x69ba9e <Ffuncall>,
    nargs=2, args=0x7fffffff0e70, handlers=15399602,
    hfun=0x44709f <safe_eval_handler>) at eval.c:1317
#14 0x00000000004472f7 in safe_call (nargs=2, func=23095458) at xdisp.c:2432
#15 0x0000000000447368 in safe_call1 (fn=23095458, arg=4) at xdisp.c:2448
#16 0x000000000044b318 in handle_fontified_prop (it=0x7fffffff11f0)
    at xdisp.c:3667
#17 0x000000000044a17a in handle_stop (it=0x7fffffff11f0) at xdisp.c:3231
#18 0x00000000004556f9 in reseat (it=0x7fffffff11f0, pos=..., force_p=1)
    at xdisp.c:6271
#19 0x0000000000448fee in init_iterator (it=0x7fffffff11f0, w=0xec3598,
    charpos=1, bytepos=1, row=0x1643140, base_face_id=DEFAULT_FACE_ID)
    at xdisp.c:2888
#20 0x0000000000449268 in start_display (it=0x7fffffff11f0, w=0xec3598,
    pos=...) at xdisp.c:2904
#21 0x000000000047b80f in try_window (window=15480221, pos=..., flags=1)
    at xdisp.c:16096
#22 0x0000000000478b55 in redisplay_window (window=15480221, just_this_one_p=0)
    at xdisp.c:15631
#23 0x0000000000470a0b in redisplay_window_0 (window=15480221) at xdisp.c:13685
#24 0x0000000000697736 in internal_condition_case_1 (
    bfun=0x4709c9 <redisplay_window_0>, arg=15480221, handlers=15370182,
    hfun=0x470998 <redisplay_window_error>) at eval.c:1231
#25 0x0000000000470979 in redisplay_windows (window=15480221) at xdisp.c:13665
#26 0x000000000046ee3c in redisplay_internal () at xdisp.c:13271
#27 0x0000000000465f90 in echo_area_display (update_frame_p=1) at xdisp.c:10685
#28 0x0000000000461f7f in message3_nolog (m=16562561) at xdisp.c:9650
#29 0x0000000000461ac9 in message3 (m=16562561) at xdisp.c:9596
#30 0x000000000068d088 in Fmessage (nargs=3, args=0x7fffffff5a10)
    at editfns.c:3462
#31 0x000000000069bf6b in Ffuncall (nargs=4, args=0x7fffffff5a08)
    at eval.c:2656
#32 0x000000000070bdfd in exec_byte_code (bytestr=16578913, vector=15479317,
    maxdepth=24, args_template=15399554, nargs=0, args=0x0) at bytecode.c:898
#33 0x000000000069d353 in funcall_lambda (fun=21727621, nargs=2,
    arg_vector=0xec3215) at eval.c:2907
#34 0x000000000069c6e9 in Ffuncall (nargs=3, args=0x7fffffff5f10)
    at eval.c:2724
#35 0x000000000069b815 in call2 (fn=19454322, arg1=16142209, arg2=16597585)
    at eval.c:2484
#36 0x000000000060db60 in lock_file (fn=16142209) at filelock.c:590
#37 0x0000000000613f76 in prepare_to_modify_buffer (start=1, end=515,
    preserve_ptr=0x0) at insdel.c:1829
#38 0x0000000000613a22 in modify_region_1 (start=1, end=515,
    preserve_chars_modiff=true) at insdel.c:1763
#39 0x00000000007389f8 in modify_region (buffer=16202757, start=4, end=2060)
    at textprop.c:97
#40 0x000000000073d4ee in Fadd_text_properties (start=4, end=2060,
    properties=22458134, object=16202757) at textprop.c:1178

Lisp Backtrace:
"put-text-property" (0xffff02d0)
"jit-lock-fontify-now" (0xffff07d0)
"jit-lock-function" (0xffff0e78)
"redisplay_internal (C function)" (0xea33d8)
"message" (0xffff5a10)
"ask-user-about-lock" (0xffff5f18)
"put-text-property" (0xffff6370)
"jit-lock-refontify" (0xffff6860)
"jit-lock-mode" (0xffff6d70)
"jit-lock-register" (0xffff7250)
"font-lock-turn-on-thing-lock" (0xffff7740)
"font-lock-mode-internal" (0xffff7c20)
"font-lock-default-function" (0xffff8100)
"font-lock-mode" (0xffff85e0)
"turn-on-font-lock" (0xffff8aa0)
"turn-on-font-lock-if-desired" (0xffff8f70)
"global-font-lock-mode-enable-in-buffers" (0xffff9528)
"run-hooks" (0xffff95f8)
"apply" (0xffff9780)
"run-mode-hooks" (0xffff9ba0)
"html-erb-mode" (0xffff9fa8)
"funcall" (0xffff9fa0)
"save-current-buffer" (0xffffa310)
"unwind-protect" (0xffffa4e0)
"let" (0xffffa7c0)
"if" (0xffffaa00)
"let" (0xffffad00)
"mmm-update-mode-info" (0xffffae20)
"if" (0xffffb280)
"if" (0xffffb4c0)
"mmm-mode-on" (0xffffb5e0)
"cond" (0xffffba30)
"mmm-mode-on-maybe" (0xffffbc18)
"funcall" (0xffffbc10)
"progn" (0xffffbf50)
"condition-case" (0xffffc2c0)
"while" (0xffffc520)
"let" (0xffffc800)
"progn" (0xffffc9f0)
"mmm-run-major-mode-hook" (0xffffcb10)
"save-current-buffer" (0xffffcf40)
"progn" (0xffffd130)
"if" (0xffffd320)
"while" (0xffffd580)
"let" (0xffffd860)
"progn" (0xffffda50)
"mmm-check-changed-buffers" (0xffffdc30)






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Sat, 23 Feb 2013 17:01:02 GMT) Full text and rfc822 format available.

Message #38 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 13743 <at> debbugs.gnu.org, Dmitry Gutov <dgutov <at> yandex.ru>
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Sat, 23 Feb 2013 11:59:18 -0500
> I can fix this particular problem with this simple patch:
[...]
> However, I'm not sure this is the right or the best way.  If it is, it
> will probably be prudent to add some protection against infinite
> recursion here.

How 'bout moving the

   if (BUFFERP (object))
     modify_region (object, start, end);

earlier in the function.  Something like the patch below.


        Stefan


=== modified file 'src/textprop.c'
--- src/textprop.c	2013-01-02 16:13:04 +0000
+++ src/textprop.c	2013-02-23 16:58:50 +0000
@@ -60,7 +60,7 @@
 static Lisp_Object Qread_only;
 Lisp_Object Qminibuffer_prompt;
 
-/* Sticky properties */
+/* Sticky properties.  */
 Lisp_Object Qfront_sticky, Qrear_nonsticky;
 
 /* If o1 is a cons whose cdr is a cons, return non-zero and set o2 to
@@ -1145,9 +1145,16 @@
   if (!i)
     return Qnil;
 
+  if (BUFFERP (object))
+    modify_region (object, start, end);
+
   s = XINT (start);
   len = XINT (end) - s;
 
+  /* Recompute `i' since modify_region may have performed indirectly
+     arbitrary modifications to the interval tree.  */
+  i = interval_of (s, object);
+
   /* No need to protect OBJECT, because we GC only if it's a buffer,
      and live buffers are always protected.  */
   GCPRO1 (properties);
@@ -1174,9 +1181,6 @@
 	}
     }
 
-  if (BUFFERP (object))
-    modify_region (object, start, end);
-
   /* We are at the beginning of interval I, with LEN chars to scan.  */
   for (;;)
     {





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Sat, 23 Feb 2013 18:46:01 GMT) Full text and rfc822 format available.

Message #41 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 13743 <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Sat, 23 Feb 2013 20:44:06 +0200
> From: Stefan Monnier <monnier <at> iro.umontreal.ca>
> Cc: Dmitry Gutov <dgutov <at> yandex.ru>,  13743 <at> debbugs.gnu.org
> Date: Sat, 23 Feb 2013 11:59:18 -0500
> 
> > I can fix this particular problem with this simple patch:
> [...]
> > However, I'm not sure this is the right or the best way.  If it is, it
> > will probably be prudent to add some protection against infinite
> > recursion here.
> 
> How 'bout moving the
> 
>    if (BUFFERP (object))
>      modify_region (object, start, end);
> 
> earlier in the function.  Something like the patch below.

This will (falsely, AFAIU) tell us that the region is about to be
modified when we return at the point marked below:

  /* If we're not starting on an interval boundary, we have to
    split this interval.  */
  if (i->position != s)
    {
      /* If this interval already has the properties, we can
         skip it.  */
      if (interval_has_all_properties (properties, i))
	{
	  ptrdiff_t got = (LENGTH (i) - (s - i->position));
	  if (got >= len)
	    RETURN_UNGCPRO (Qnil); <<<<<<<<<<<<<<<<<<<<<<<<<<<
	  len -= got;
	  i = next_interval (i);
	}
      else





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Sun, 24 Feb 2013 15:31:01 GMT) Full text and rfc822 format available.

Message #44 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: Stefan Monnier <monnier <at> iro.umontreal.ca>, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Sun, 24 Feb 2013 19:28:32 +0400
On 23.02.2013 22:44, Eli Zaretskii wrote:
>>> I can fix this particular problem with this simple patch:
>> [...]
>>> However, I'm not sure this is the right or the best way.  If it is, it
>>> will probably be prudent to add some protection against infinite
>>> recursion here.
>>
>> How 'bout moving the
>>
>>     if (BUFFERP (object))
>>       modify_region (object, start, end);
>>
>> earlier in the function.  Something like the patch below.
>
> This will (falsely, AFAIU) tell us that the region is about to be
> modified when we return at the point marked below:

I tried the patches, and both seem to work fine so far. If you could 
explain the practical implications of the drawback in Stefan's patch 
you're describing here, I'll try to test for that, too.

>    /* If we're not starting on an interval boundary, we have to
>      split this interval.  */
>    if (i->position != s)
>      {
>        /* If this interval already has the properties, we can
>           skip it.  */
>        if (interval_has_all_properties (properties, i))
> 	{
> 	  ptrdiff_t got = (LENGTH (i) - (s - i->position));
> 	  if (got >= len)
> 	    RETURN_UNGCPRO (Qnil); <<<<<<<<<<<<<<<<<<<<<<<<<<<
> 	  len -= got;
> 	  i = next_interval (i);
> 	}
>        else
>





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Sun, 24 Feb 2013 15:53:01 GMT) Full text and rfc822 format available.

Message #47 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Sun, 24 Feb 2013 17:50:37 +0200
> Date: Sun, 24 Feb 2013 19:28:32 +0400
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> CC: Stefan Monnier <monnier <at> iro.umontreal.ca>, 13743 <at> debbugs.gnu.org
> 
> >> How 'bout moving the
> >>
> >>     if (BUFFERP (object))
> >>       modify_region (object, start, end);
> >>
> >> earlier in the function.  Something like the patch below.
> >
> > This will (falsely, AFAIU) tell us that the region is about to be
> > modified when we return at the point marked below:
> 
> I tried the patches, and both seem to work fine so far. If you could 
> explain the practical implications of the drawback in Stefan's patch 
> you're describing here, I'll try to test for that, too.

You need to simulate the situation which causes us to return here:

> >        /* If this interval already has the properties, we can
> >           skip it.  */
> >        if (interval_has_all_properties (properties, i))
> > 	{
> > 	  ptrdiff_t got = (LENGTH (i) - (s - i->position));
> > 	  if (got >= len)
> > 	    RETURN_UNGCPRO (Qnil); <<<<<<<<<<<<<<<<<<<<<<<<<<<

This condition means that we find an interval which already has the
property we are trying to add, and that interval's length is at least
as large as the distance between START and END.

The simplest thing to try reproducing this would be to call
add-text-properties with the property that is already somewhere in the
buffer and with START and END that belong to the buffer region with
this property.  I hope this will show you what happens.

The manifestation of the problem will be that modify_region will be
called in this case, although we don't actually modify anything.  You
will probably see the "modified" indicator on the mode line, something
that shouldn't have happened.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 05:55:02 GMT) Full text and rfc822 format available.

Message #50 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Mon, 25 Feb 2013 09:52:24 +0400
On 24.02.2013 19:50, Eli Zaretskii wrote:
>> Date: Sun, 24 Feb 2013 19:28:32 +0400
>> From: Dmitry Gutov <dgutov <at> yandex.ru>
>> CC: Stefan Monnier <monnier <at> iro.umontreal.ca>, 13743 <at> debbugs.gnu.org
>>
>>>> How 'bout moving the
>>>>
>>>>      if (BUFFERP (object))
>>>>        modify_region (object, start, end);
>>>>
>>>> earlier in the function.  Something like the patch below.
>>>
>>> This will (falsely, AFAIU) tell us that the region is about to be
>>> modified when we return at the point marked below:
>>
>> I tried the patches, and both seem to work fine so far. If you could
>> explain the practical implications of the drawback in Stefan's patch
>> you're describing here, I'll try to test for that, too.
>
> You need to simulate the situation which causes us to return here:
>
>>>         /* If this interval already has the properties, we can
>>>            skip it.  */
>>>         if (interval_has_all_properties (properties, i))
>>> 	{
>>> 	  ptrdiff_t got = (LENGTH (i) - (s - i->position));
>>> 	  if (got >= len)
>>> 	    RETURN_UNGCPRO (Qnil); <<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> This condition means that we find an interval which already has the
> property we are trying to add, and that interval's length is at least
> as large as the distance between START and END.
>
> The simplest thing to try reproducing this would be to call
> add-text-properties with the property that is already somewhere in the
> buffer and with START and END that belong to the buffer region with
> this property.  I hope this will show you what happens.

Thanks.

> The manifestation of the problem will be that modify_region will be
> called in this case, although we don't actually modify anything.  You
> will probably see the "modified" indicator on the mode line, something
> that shouldn't have happened.

That is indeed what happens.

OTOH, the existing behavior in this area is rather messy anyway:

a) If START equals to the beginning of the region with the same 
property, the buffer is marked modified anyway (even though nothing 
changes from the observer's point of view).

So, the trivial example of repeating an `add-text-properties' call with 
the same arguments in a previously unpropertized buffer will mark it as 
modified every time.

b) This probably has something to do with internal representation, but 
even having the same property span before START is not a safe bet:

1. Create a new file with a line of text in it, preferably without 
spaces, to see face changes easily
2. Save it, disable font-lock-mode.
3. Evaluate:

(add-text-properties 1 6 '(face font-lock-constant-face)) => modified
save
(add-text-properties 2 6 '(face font-lock-constant-face)) => unmodified
(add-text-properties 2 7 '(face font-lock-constant-face)) => modified
save
(add-text-properties 2 6 '(face font-lock-constant-face)) => unmodified
- optional step
(add-text-properties 2 7 '(face font-lock-constant-face)) => modified(!)
- even though 1 still has the same face
- you can save and repeat this step indefinitely




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 15:27:02 GMT) Full text and rfc822 format available.

Message #53 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 10:25:15 -0500
>> The manifestation of the problem will be that modify_region will be
>> called in this case, although we don't actually modify anything.  You
>> will probably see the "modified" indicator on the mode line, something
>> that shouldn't have happened.
> That is indeed what happens.
> OTOH, the existing behavior in this area is rather messy anyway:

Not only that, but it's not clear why "that shouldn't have happened".
It's good to optimize away the whole add-text-properties when it ends up
doing nothing, but it's just an optimization.

And I don't think it's an important one here, since (as Dmitry points
out) the likely most common case (of having `start' be right at the
beginning of an interval object) didn't work anyway, and furthermore
most calls to add-text-properties are likely to be protected by
inhibit-modification-hooks.


        Stefan




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 16:28:02 GMT) Full text and rfc822 format available.

Message #56 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 18:25:26 +0200
> Date: Mon, 25 Feb 2013 09:52:24 +0400
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
> 
> OTOH, the existing behavior in this area is rather messy anyway:
> 
> a) If START equals to the beginning of the region with the same 
> property, the buffer is marked modified anyway (even though nothing 
> changes from the observer's point of view).
> 
> So, the trivial example of repeating an `add-text-properties' call with 
> the same arguments in a previously unpropertized buffer will mark it as 
> modified every time.
> 
> b) This probably has something to do with internal representation, but 
> even having the same property span before START is not a safe bet:

That's a bug, actually, and a very old one at that (at least 17 years
old, IIUC).  The code didn't handle correctly all the situations where
there's nothing to change, before it announced a change by calling
modify_region (and later called signal_after_change).

I installed on the trunk revision 111875 to fix this.  Now all your
examples:

> 1. Create a new file with a line of text in it, preferably without 
> spaces, to see face changes easily
> 2. Save it, disable font-lock-mode.
> 3. Evaluate:
> 
> (add-text-properties 1 6 '(face font-lock-constant-face)) => modified
> save
> (add-text-properties 2 6 '(face font-lock-constant-face)) => unmodified
> (add-text-properties 2 7 '(face font-lock-constant-face)) => modified
> save
> (add-text-properties 2 6 '(face font-lock-constant-face)) => unmodified
> - optional step
> (add-text-properties 2 7 '(face font-lock-constant-face)) => modified(!)
> - even though 1 still has the same face
> - you can save and repeat this step indefinitely

work as expected.

Interestingly, this also fixes the original segfault which started
this discussion (not before I fixed similar bugs in
remove-text-properties and elsewhere in textprop.c, because making the
change only n add-text-properties still triggered a similar segfault
from remove-text-properties).  So perhaps the fact that buffer
modifications were announced unnecessarily is the root cause for the
segfault.

I couldn't convince myself that, even after revision 111875, we could
not end up in a situation where redisplay triggered by modify_region
changes the intervals when it fontifies the buffer.  So perhaps we
need a followup patch to plumb that potential hole, something along
the following:

=== modified file 'src/textprop.c'
--- src/textprop.c	2013-02-25 16:13:42 +0000
+++ src/textprop.c	2013-02-25 16:23:43 +0000
@@ -1134,6 +1134,7 @@ Return t if any property value actually 
   register int modified = 0;
   struct gcpro gcpro1;
   ptrdiff_t got;
+  int first_time = 1;
 
   properties = validate_plist (properties);
   if (NILP (properties))
@@ -1142,6 +1143,7 @@ Return t if any property value actually 
   if (NILP (object))
     XSETBUFFER (object, current_buffer);
 
+ retry:
   i = validate_interval_range (object, &start, &end, hard);
   if (!i)
     return Qnil;
@@ -1174,8 +1176,25 @@ Return t if any property value actually 
       copy_properties (unchanged, i);
     }
 
-  if (BUFFERP (object))
-    modify_region (object, start, end);
+  if (BUFFERP (object) && first_time)
+    {
+      ptrdiff_t prev_total_length = TOTAL_LENGTH (i);
+      ptrdiff_t prev_pos = i->position;
+
+      modify_region (object, start, end);
+      /* If someone called us recursively as a side effect of
+	 modify_region, and changed the intervals behind our back
+	 (could happen if lock_file, called by prepare_to_modify_buffer,
+	 triggers redisplay, and that calls add-text-properties again
+	 in the same buffer), we cannot continue with I, because its
+	 data changed.  So we restart the interval analysis anew.  */
+      if (TOTAL_LENGTH (i) != prev_total_length
+	  || i->position != prev_pos)
+	{
+	  first_time = 0;
+	  goto retry;
+	}
+    }
 
   /* We are at the beginning of interval I, with LEN chars to scan.  */
   for (;;)





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 16:30:01 GMT) Full text and rfc822 format available.

Message #59 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 18:27:56 +0200
Btw, what mmm-mode does is quite nasty, because it causes stale lock
files to be left behind, if you press 'p' when Emacs says that the
file is locked.  This is because mmm-mode makes the buffer unmodified
again after doing whatever it is that causes these prompts, and if you
then kill Emacs without ever editing the file, the function that
unlocks the file is not called (because the buffer is not modified).




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 16:40:01 GMT) Full text and rfc822 format available.

Message #62 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 13743 <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 18:37:50 +0200
> From: Stefan Monnier <monnier <at> iro.umontreal.ca>
> Cc: Eli Zaretskii <eliz <at> gnu.org>,  13743 <at> debbugs.gnu.org
> Date: Mon, 25 Feb 2013 10:25:15 -0500
> 
> >> The manifestation of the problem will be that modify_region will be
> >> called in this case, although we don't actually modify anything.  You
> >> will probably see the "modified" indicator on the mode line, something
> >> that shouldn't have happened.
> > That is indeed what happens.
> > OTOH, the existing behavior in this area is rather messy anyway:
> 
> Not only that, but it's not clear why "that shouldn't have happened".

Because we announce that the buffer was changed when in fact it
wasn't.  That's a lie.  (It also causes redisplay to work harder as a
side effect.)

> It's good to optimize away the whole add-text-properties when it ends up
> doing nothing, but it's just an optimization.

Well, avoiding lies is always an optimization, isn't it?  Life can
(and does) go on even without that optimization.

But seriously, how can you claim this not to be a bug?  Here, try this
simplified recipe:

 emacs -Q
 C-x b foo RET
 M-: (insert-char ?a 60) RET
 M-: (add-text-properties 2 10 '(face error)) RET => t

The buffer is marked modified.

 M-~

The buffer is marked unmodified.

 M-: (add-text-properties 2 10 '(face error)) RET => nil

The buffer is marked modified again, although nothing's changed, and
the value returned is nil.

You can repeat the last 2 steps forever, the buffer always becomes
modified.  I don't see how this could be anything but a bug.  Not a
catastrophe, I agree, but a bug nonetheless.

> And I don't think it's an important one here, since (as Dmitry points
> out) the likely most common case (of having `start' be right at the
> beginning of an interval object) didn't work anyway

It does work now.  More importantly, it fixed the original crash.

> and furthermore most calls to add-text-properties are likely to be
> protected by inhibit-modification-hooks.

I don't think inhibit-modification-hooks stops the file-locking prompt
from being shown, does it?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 18:30:02 GMT) Full text and rfc822 format available.

Message #65 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Mon, 25 Feb 2013 22:27:35 +0400
On 25.02.2013 20:25, Eli Zaretskii wrote:
> I installed on the trunk revision 111875 to fix this.  Now all your
> examples:
>> ...
> work as expected.

Thanks!

> Interestingly, this also fixes the original segfault which started
> this discussion (not before I fixed similar bugs in
> remove-text-properties and elsewhere in textprop.c, because making the
> change only n add-text-properties still triggered a similar segfault
> from remove-text-properties).  So perhaps the fact that buffer
> modifications were announced unnecessarily is the root cause for the
> segfault.

Also, mmm-mode now opens small files like the test one noticeably 
faster. Not sure why, but it's a nice win.

> I couldn't convince myself that, even after revision 111875, we could
> not end up in a situation where redisplay triggered by modify_region
> changes the intervals when it fontifies the buffer.  So perhaps we
> need a followup patch to plumb that potential hole, something along
> the following:

That scenario doesn't sound good, but I'll leave judging the last patch 
to the experts. I can't reproduce the original problem anymore, so 
please this bug when you think appropriate.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 18:32:01 GMT) Full text and rfc822 format available.

Message #68 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 13743 <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 13:29:57 -0500
>> >> The manifestation of the problem will be that modify_region will be
>> >> called in this case, although we don't actually modify anything.  You
>> >> will probably see the "modified" indicator on the mode line, something
>> >> that shouldn't have happened.
>> > That is indeed what happens.
>> > OTOH, the existing behavior in this area is rather messy anyway:
>> Not only that, but it's not clear why "that shouldn't have happened".
> Because we announce that the buffer was changed when in fact it
> wasn't.  That's a lie.  (It also causes redisplay to work harder as a
> side effect.)

That's a widespread "lie".  E.g. turn on overwrite-mode and replace the
char at point with itself: sure enough the buffer is marked as modified.
Along the same lines, try (setq t t) and watch how it complains that
we're trying to modify a read-only object, ...

> You can repeat the last 2 steps forever, the buffer always becomes
> modified.  I don't see how this could be anything but a bug.  Not a
> catastrophe, I agree, but a bug nonetheless.

add-text-property is a mutation operation, like setq.  Whether or not it
returns data about the "old state" doesn't make it less of
a side-effecting operation, in my eyes.  So, no I do not consider it to
be a bug at all.

Try (add-text-properties 2 10 '(foo nil)) for another corner case: the
`foo' property was already nil (by default), and yet add-text-properties
claims that setting it to nil is a modification.

>> And I don't think it's an important one here, since (as Dmitry points
>> out) the likely most common case (of having `start' be right at the
>> beginning of an interval object) didn't work anyway
> It does work now.  More importantly, it fixed the original crash.

I suspect it only works around the crash by optimizing away the call
to modify_region in the particular case you're testing.

>> and furthermore most calls to add-text-properties are likely to be
>> protected by inhibit-modification-hooks.
> I don't think inhibit-modification-hooks stops the file-locking prompt
> from being shown, does it?

Well, I meant not just inhibit-modification-hooks but
with-silent-modifications (or a comparable set of let-bindings and
unwind-protect), which does prevent the prompt.


        Stefan




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 18:59:01 GMT) Full text and rfc822 format available.

Message #71 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 13743 <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 20:56:19 +0200
> From: Stefan Monnier <monnier <at> iro.umontreal.ca>
> Cc: dgutov <at> yandex.ru,  13743 <at> debbugs.gnu.org
> Date: Mon, 25 Feb 2013 13:29:57 -0500
> 
> turn on overwrite-mode and replace the char at point with itself:
> sure enough the buffer is marked as modified.

Since you know how things work internally in this case, I'm surprised
that you bring this example.  It is not analogous to what happens in
the case in point.  In the case in point, we didn't change anything at
all, we just walked the interval tree and wound up discovering that no
changes are needed.  But the call to modify_region was issued before
we made that discovery -- and that's the problem.

By contrast, in overwrite-mode we actually make the change without
trying to avoid it.

> Along the same lines, try (setq t t) and watch how it complains that
> we're trying to modify a read-only object, ...

Feel free to fix this blunder.

> > You can repeat the last 2 steps forever, the buffer always becomes
> > modified.  I don't see how this could be anything but a bug.  Not a
> > catastrophe, I agree, but a bug nonetheless.
> 
> add-text-property is a mutation operation, like setq.  Whether or not it
> returns data about the "old state" doesn't make it less of
> a side-effecting operation, in my eyes.

If add-text-property was a black box, I might consider agreeing with
you.  But since it isn't, and its algorithm is glaringly clear, I
don't.  The algorithm clearly tries to avoid mutation when possible,
it just didn't go far enough.

> So, no I do not consider it to be a bug at all.

Not even considering the fact that it causes redisplay do redundant
work?  If so, we will have to agree to disagree.

> Try (add-text-properties 2 10 '(foo nil)) for another corner case: the
> `foo' property was already nil (by default), and yet add-text-properties
> claims that setting it to nil is a modification.

I didn't say that what I fixed was the last bug.

> >> And I don't think it's an important one here, since (as Dmitry points
> >> out) the likely most common case (of having `start' be right at the
> >> beginning of an interval object) didn't work anyway
> > It does work now.  More importantly, it fixed the original crash.
> 
> I suspect it only works around the crash by optimizing away the call
> to modify_region in the particular case you're testing.

So you think I should install the followup I showed earlier?

> >> and furthermore most calls to add-text-properties are likely to be
> >> protected by inhibit-modification-hooks.
> > I don't think inhibit-modification-hooks stops the file-locking prompt
> > from being shown, does it?
> 
> Well, I meant not just inhibit-modification-hooks but
> with-silent-modifications (or a comparable set of let-bindings and
> unwind-protect), which does prevent the prompt.

Not with mmm-mode, it doesn't.  If you repeat the original recipe for
the crash, putting a breakpoint in filelock.c where it calls
ask-user-about-lock, and type 'p' to the first prompt, you will get a
second prompt, triggered by jit-lock, which does use
with-silent-modifications, AFAICS.  I didn't try to figure out why
this happens.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 19:10:01 GMT) Full text and rfc822 format available.

Message #74 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Mon, 25 Feb 2013 23:08:04 +0400
On 25.02.2013 20:27, Eli Zaretskii wrote:
> Btw, what mmm-mode does is quite nasty, because it causes stale lock
> files to be left behind, if you press 'p' when Emacs says that the
> file is locked.  This is because mmm-mode makes the buffer unmodified
> again after doing whatever it is that causes these prompts, and if you
> then kill Emacs without ever editing the file, the function that
> unlocks the file is not called (because the buffer is not modified).

AFAICT, it only did that to make sure the subsequent `kill-buffer' 
doesn't query the user. It doesn't seem to do that either way, so I 
removed the `set-buffer-modified-p' call.

But Emacs still leaves the orphan lock files upon exit.
Maybe that has something to do with the fact that said modification and 
killing are being performed in a temporary indirect buffer.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 19:34:01 GMT) Full text and rfc822 format available.

Message #77 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 21:31:46 +0200
> Date: Mon, 25 Feb 2013 23:08:04 +0400
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
> 
> On 25.02.2013 20:27, Eli Zaretskii wrote:
> > Btw, what mmm-mode does is quite nasty, because it causes stale lock
> > files to be left behind, if you press 'p' when Emacs says that the
> > file is locked.  This is because mmm-mode makes the buffer unmodified
> > again after doing whatever it is that causes these prompts, and if you
> > then kill Emacs without ever editing the file, the function that
> > unlocks the file is not called (because the buffer is not modified).
> 
> AFAICT, it only did that to make sure the subsequent `kill-buffer' 
> doesn't query the user. It doesn't seem to do that either way, so I 
> removed the `set-buffer-modified-p' call.

And after removing that call, do you end up with a "modified" buffer
after visiting a file?

> But Emacs still leaves the orphan lock files upon exit.
> Maybe that has something to do with the fact that said modification and 
> killing are being performed in a temporary indirect buffer.

I doubt that.  The only thing that matters to file locking is the name
of the file.  It doesn't care about buffers.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 20:31:01 GMT) Full text and rfc822 format available.

Message #80 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 13743 <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 15:28:36 -0500
>> turn on overwrite-mode and replace the char at point with itself:
>> sure enough the buffer is marked as modified.
> Since you know how things work internally in this case, I'm surprised
> that you bring this example.

Actually, I don't really know how overwrite-mode works (I remembering
seeing it some point, but that's about as much I know about it).

> By contrast, in overwrite-mode we actually make the change without
> trying to avoid it.

That's an internal implementation detail, IMO.

>> Along the same lines, try (setq t t) and watch how it complains that
>> we're trying to modify a read-only object, ...
> Feel free to fix this blunder.

;-)

>> > You can repeat the last 2 steps forever, the buffer always becomes
>> > modified.  I don't see how this could be anything but a bug.  Not a
>> > catastrophe, I agree, but a bug nonetheless.
>> add-text-property is a mutation operation, like setq.  Whether or not it
>> returns data about the "old state" doesn't make it less of
>> a side-effecting operation, in my eyes.
> If add-text-property was a black box,

Why should we not consider it as a black box?

> I might consider agreeing with you.  But since it isn't, and its
> algorithm is glaringly clear, I don't.

I see nowhere (other than in its implementation) something that might
lead one to think that it's clever.

> The algorithm clearly tries to avoid mutation when possible, it just
> didn't go far enough.

Indeed, we could go further and reduce the interval passed to
modify_region in the case where some of the leading/trailing part of the
text already has the requested property values.

All these are just optimizations (i.e. quality of implementation
details, lack of which is not a bug).

>> So, no I do not consider it to be a bug at all.
> Not even considering the fact that it causes redisplay do redundant
> work?  If so, we will have to agree to disagree.

No, not even considering it.

>> >> And I don't think it's an important one here, since (as Dmitry points
>> >> out) the likely most common case (of having `start' be right at the
>> >> beginning of an interval object) didn't work anyway
>> > It does work now.  More importantly, it fixed the original crash.
>> I suspect it only works around the crash by optimizing away the call
>> to modify_region in the particular case you're testing.
> So you think I should install the followup I showed earlier?

I'd leaning towards yes, although it's sufficiently ugly (and dangerous
since there's no reason to assume that it won't inf-loop) that I'd
rather not.

> Not with mmm-mode, it doesn't.  If you repeat the original recipe for
> the crash, putting a breakpoint in filelock.c where it calls
> ask-user-about-lock, and type 'p' to the first prompt, you will get a
> second prompt, triggered by jit-lock, which does use
> with-silent-modifications, AFAICS.  I didn't try to figure out why
> this happens.

Looks like a weird corner case, indeed.  Maybe some code run from
jit-lock ends up (re)setting byte-file-name (which is normally bound to
nil by with-silent-modifications).


        Stefan




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Mon, 25 Feb 2013 23:25:02 GMT) Full text and rfc822 format available.

Message #83 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Tue, 26 Feb 2013 03:23:11 +0400
On 25.02.2013 23:31, Eli Zaretskii wrote:
>> Date: Mon, 25 Feb 2013 23:08:04 +0400
>> From: Dmitry Gutov <dgutov <at> yandex.ru>
>> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
>>
>> On 25.02.2013 20:27, Eli Zaretskii wrote:
>>> Btw, what mmm-mode does is quite nasty, because it causes stale lock
>>> files to be left behind, if you press 'p' when Emacs says that the
>>> file is locked.  This is because mmm-mode makes the buffer unmodified
>>> again after doing whatever it is that causes these prompts, and if you
>>> then kill Emacs without ever editing the file, the function that
>>> unlocks the file is not called (because the buffer is not modified).
>>
>> AFAICT, it only did that to make sure the subsequent `kill-buffer'
>> doesn't query the user. It doesn't seem to do that either way, so I
>> removed the `set-buffer-modified-p' call.
>
> And after removing that call, do you end up with a "modified" buffer
> after visiting a file?

Nope. You can see for yourself, I pushed that change.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Tue, 26 Feb 2013 03:42:02 GMT) Full text and rfc822 format available.

Message #86 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 13743 <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Tue, 26 Feb 2013 05:39:28 +0200
> From: Stefan Monnier <monnier <at> iro.umontreal.ca>
> Cc: dgutov <at> yandex.ru,  13743 <at> debbugs.gnu.org
> Date: Mon, 25 Feb 2013 15:28:36 -0500
> 
> >> I suspect it only works around the crash by optimizing away the call
> >> to modify_region in the particular case you're testing.
> > So you think I should install the followup I showed earlier?
> 
> I'd leaning towards yes, although it's sufficiently ugly (and dangerous
> since there's no reason to assume that it won't inf-loop) that I'd
> rather not.

No, the patch I posted a few messages ago cannot infloop, it only
retries once (because another call to modify_region is clearly
unnecessary).  I will install it, then.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Tue, 26 Feb 2013 03:54:02 GMT) Full text and rfc822 format available.

Message #89 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Tue, 26 Feb 2013 05:51:02 +0200
> Date: Tue, 26 Feb 2013 03:23:11 +0400
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
> 
> On 25.02.2013 23:31, Eli Zaretskii wrote:
> >> Date: Mon, 25 Feb 2013 23:08:04 +0400
> >> From: Dmitry Gutov <dgutov <at> yandex.ru>
> >> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
> >>
> >> On 25.02.2013 20:27, Eli Zaretskii wrote:
> >>> Btw, what mmm-mode does is quite nasty, because it causes stale lock
> >>> files to be left behind, if you press 'p' when Emacs says that the
> >>> file is locked.  This is because mmm-mode makes the buffer unmodified
> >>> again after doing whatever it is that causes these prompts, and if you
> >>> then kill Emacs without ever editing the file, the function that
> >>> unlocks the file is not called (because the buffer is not modified).
> >>
> >> AFAICT, it only did that to make sure the subsequent `kill-buffer'
> >> doesn't query the user. It doesn't seem to do that either way, so I
> >> removed the `set-buffer-modified-p' call.
> >
> > And after removing that call, do you end up with a "modified" buffer
> > after visiting a file?
> 
> Nope.

Then the root cause is still there: the file is locked by an operation
that leaves the buffer unmodified.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Tue, 26 Feb 2013 04:02:02 GMT) Full text and rfc822 format available.

Message #92 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Tue, 26 Feb 2013 07:59:36 +0400
On 26.02.2013 7:51, Eli Zaretskii wrote:
>> Date: Tue, 26 Feb 2013 03:23:11 +0400
>> From: Dmitry Gutov <dgutov <at> yandex.ru>
>> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
>>
>> On 25.02.2013 23:31, Eli Zaretskii wrote:
>>>> Date: Mon, 25 Feb 2013 23:08:04 +0400
>>>> From: Dmitry Gutov <dgutov <at> yandex.ru>
>>>> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
>>>>
>>>> On 25.02.2013 20:27, Eli Zaretskii wrote:
>>>>> Btw, what mmm-mode does is quite nasty, because it causes stale lock
>>>>> files to be left behind, if you press 'p' when Emacs says that the
>>>>> file is locked.  This is because mmm-mode makes the buffer unmodified
>>>>> again after doing whatever it is that causes these prompts, and if you
>>>>> then kill Emacs without ever editing the file, the function that
>>>>> unlocks the file is not called (because the buffer is not modified).
>>>>
>>>> AFAICT, it only did that to make sure the subsequent `kill-buffer'
>>>> doesn't query the user. It doesn't seem to do that either way, so I
>>>> removed the `set-buffer-modified-p' call.
>>>
>>> And after removing that call, do you end up with a "modified" buffer
>>> after visiting a file?
>>
>> Nope.
>
> Then the root cause is still there: the file is locked by an operation
> that leaves the buffer unmodified.

Any ideas what that might be? mmm-mode initialization code is rather 
complex.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Tue, 26 Feb 2013 04:38:02 GMT) Full text and rfc822 format available.

Message #95 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 13743 <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Mon, 25 Feb 2013 23:35:29 -0500
> No, the patch I posted a few messages ago cannot infloop, it only
> retries once (because another call to modify_region is clearly
> unnecessary).

Oh, right I missed that part.  It's still ugly, but I guess it is
safe, indeed.  Feel free to install it,


        Stefan




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Tue, 26 Feb 2013 18:45:01 GMT) Full text and rfc822 format available.

Message #98 received at 13743 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Tue, 26 Feb 2013 20:42:39 +0200
> Date: Tue, 26 Feb 2013 07:59:36 +0400
> From: Dmitry Gutov <dgutov <at> yandex.ru>
> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
> 
> On 26.02.2013 7:51, Eli Zaretskii wrote:
> >> Date: Tue, 26 Feb 2013 03:23:11 +0400
> >> From: Dmitry Gutov <dgutov <at> yandex.ru>
> >> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
> >>
> >> On 25.02.2013 23:31, Eli Zaretskii wrote:
> >>>> Date: Mon, 25 Feb 2013 23:08:04 +0400
> >>>> From: Dmitry Gutov <dgutov <at> yandex.ru>
> >>>> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
> >>>>
> >>>> On 25.02.2013 20:27, Eli Zaretskii wrote:
> >>>>> Btw, what mmm-mode does is quite nasty, because it causes stale lock
> >>>>> files to be left behind, if you press 'p' when Emacs says that the
> >>>>> file is locked.  This is because mmm-mode makes the buffer unmodified
> >>>>> again after doing whatever it is that causes these prompts, and if you
> >>>>> then kill Emacs without ever editing the file, the function that
> >>>>> unlocks the file is not called (because the buffer is not modified).
> >>>>
> >>>> AFAICT, it only did that to make sure the subsequent `kill-buffer'
> >>>> doesn't query the user. It doesn't seem to do that either way, so I
> >>>> removed the `set-buffer-modified-p' call.
> >>>
> >>> And after removing that call, do you end up with a "modified" buffer
> >>> after visiting a file?
> >>
> >> Nope.
> >
> > Then the root cause is still there: the file is locked by an operation
> > that leaves the buffer unmodified.
> 
> Any ideas what that might be? mmm-mode initialization code is rather 
> complex.

I suggest to run Emacs under GDB, put a breakpoint in lock_file and
unlock_file, and when they break, see who calls them in C and in Lisp.




Reply sent to Dmitry Gutov <dgutov <at> yandex.ru>:
You have taken responsibility. (Wed, 27 Feb 2013 17:49:01 GMT) Full text and rfc822 format available.

Notification sent to Dmitry Gutov <dgutov <at> yandex.ru>:
bug acknowledged by developer. (Wed, 27 Feb 2013 17:49:02 GMT) Full text and rfc822 format available.

Message #103 received at 13743-done <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 13743-done <at> debbugs.gnu.org, monnier <at> iro.umontreal.ca
Subject: Re: bug#13743: 24.2.93; Segmentation fault when trying to [s]teal
	a file opened elsewhere
Date: Wed, 27 Feb 2013 21:46:16 +0400
On 26.02.2013 22:42, Eli Zaretskii wrote:
>> Date: Tue, 26 Feb 2013 07:59:36 +0400
>> From: Dmitry Gutov <dgutov <at> yandex.ru>
>> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
>>
>> On 26.02.2013 7:51, Eli Zaretskii wrote:
>>>> Date: Tue, 26 Feb 2013 03:23:11 +0400
>>>> From: Dmitry Gutov <dgutov <at> yandex.ru>
>>>> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
>>>>
>>>> On 25.02.2013 23:31, Eli Zaretskii wrote:
>>>>>> Date: Mon, 25 Feb 2013 23:08:04 +0400
>>>>>> From: Dmitry Gutov <dgutov <at> yandex.ru>
>>>>>> CC: monnier <at> iro.umontreal.ca, 13743 <at> debbugs.gnu.org
>>>>>>
>>>>>> On 25.02.2013 20:27, Eli Zaretskii wrote:
>>>>>>> Btw, what mmm-mode does is quite nasty, because it causes stale lock
>>>>>>> files to be left behind, if you press 'p' when Emacs says that the
>>>>>>> file is locked.  This is because mmm-mode makes the buffer unmodified
>>>>>>> again after doing whatever it is that causes these prompts, and if you
>>>>>>> then kill Emacs without ever editing the file, the function that
>>>>>>> unlocks the file is not called (because the buffer is not modified).
>>>>>>
>>>>>> AFAICT, it only did that to make sure the subsequent `kill-buffer'
>>>>>> doesn't query the user. It doesn't seem to do that either way, so I
>>>>>> removed the `set-buffer-modified-p' call.
>>>>>
>>>>> And after removing that call, do you end up with a "modified" buffer
>>>>> after visiting a file?
>>>>
>>>> Nope.
>>>
>>> Then the root cause is still there: the file is locked by an operation
>>> that leaves the buffer unmodified.
>>
>> Any ideas what that might be? mmm-mode initialization code is rather
>> complex.
>
> I suggest to run Emacs under GDB, put a breakpoint in lock_file and
> unlock_file, and when they break, see who calls them in C and in Lisp.

Thanks, this little investigation has resulted in Bug#13836, please take 
a look when you have the time.

Meanwhile, binding `buffer-file-truename' to nil around the whole 
indirect-buffer business seems to work around this well enough.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#13743; Package emacs. (Sat, 02 Mar 2013 09:32:01 GMT) Full text and rfc822 format available.

Message #106 received at 13743-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 13743-done <at> debbugs.gnu.org, dgutov <at> yandex.ru
Subject: Re: bug#13743: 24.2.93;
	Segmentation fault when trying to [s]teal a file opened elsewhere
Date: Sat, 02 Mar 2013 11:30:59 +0200
> From: Stefan Monnier <monnier <at> iro.umontreal.ca>
> Cc: dgutov <at> yandex.ru,  13743 <at> debbugs.gnu.org
> Date: Mon, 25 Feb 2013 23:35:29 -0500
> 
> > No, the patch I posted a few messages ago cannot infloop, it only
> > retries once (because another call to modify_region is clearly
> > unnecessary).
> 
> Oh, right I missed that part.  It's still ugly, but I guess it is
> safe, indeed.  Feel free to install it,

Done (trunk revision 111914).

Closing the bug.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 30 Mar 2013 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 11 years and 233 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.