* Tramp with global-auto-revert-mode. @ 2004-05-12 22:54 Luc Teirlinck 2004-05-12 23:26 ` Luc Teirlinck 0 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-12 22:54 UTC (permalink / raw) Cc: emacs-devel I start: emacs -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' I visit a file ~/streams.texi on a remote Solaris2.8 machine, using: C-x C-f /ssh:USER@HOST:~/streams.texi. (This file is essentially identical to lispref/streams.texi). Works perfectly. Now I do the same for ~/sequences.texi. (Essentially identical to lispref/sequences.texi). Tramp complains about "Invalid base64 data", so it fails. I try again. Emacs crashes. I start Emacs under gdb. This time I visit sequences.texi first. No problem, no invalid base64 data. Then I try to visit streams.texi. Now this time Tramp claims streams.texi is the one with invalid data. I try again. Emacs crashes. Without the (global-auto-revert-mode 1), the crash does not occur, nor is there any mention of invalid base64 data. The (blink-cursor-mode 0) is only there because without it, my nervous system crashes, long before Emacs does. [bash2.05b.0 ~ 3 1] cd /home/teirllm/emacscvsdir/emacs/src [bash2.05b.0 ~/emacscvsdir/emacs/src 3 2] gdb emacs-21.3.50.1 GNU gdb Red Hat Linux 7.x (5.0rh-15) (MI_OUT) Copyright 2001 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux"... DISPLAY = :0 TERM = xterm Breakpoint 1 at 0x80dfc42: file emacs.c, line 433. Breakpoint 2 at 0x80c4554: file xterm.c, line 7838. (gdb) run -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Starting program: /home/teirllm/emacscvsdir/emacs/src/emacs-21.3.50.1 -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Breakpoint 1, abort () at emacs.c:433 433 kill (getpid (), SIGABRT); (gdb) ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-12 22:54 Tramp with global-auto-revert-mode Luc Teirlinck @ 2004-05-12 23:26 ` Luc Teirlinck 2004-05-13 23:11 ` Kim F. Storm 0 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-12 23:26 UTC (permalink / raw) Cc: kai, emacs-devel Here is the complete backtrace of the crash: ===File ~/bt================================================ #0 abort () at emacs.c:433 #1 0x081272ed in mark_object (arg=1217377132) at alloc.c:5034 #2 0x08127352 in mark_object (arg=-1466694512) at alloc.c:5051 #3 0x08127352 in mark_object (arg=-1466695680) at alloc.c:5051 #4 0x08125dba in mark_memory (start=0xbffe63c0, end=0xbffff57c) at alloc.c:3700 #5 0x081261ed in mark_stack () at alloc.c:4055 #6 0x081267ea in Fgarbage_collect () at alloc.c:4429 #7 0x081393f6 in Ffuncall (nargs=2, args=0xbffe6550) at eval.c:2666 #8 0x0816134c in Fbyte_code (bytestr=1753791512, vector=-2005954448, maxdepth=5) at bytecode.c:689 #9 0x08139afe in funcall_lambda (fun=-2005954240, nargs=5, arg_vector=0xbffe6674) at eval.c:2913 #10 0x081396cd in Ffuncall (nargs=6, args=0xbffe6670) at eval.c:2783 #11 0x0816134c in Fbyte_code (bytestr=1753791848, vector=-2004302960, maxdepth=10) at bytecode.c:689 #12 0x08139afe in funcall_lambda (fun=-2004302760, nargs=5, arg_vector=0xbffe67a4) at eval.c:2913 #13 0x081396cd in Ffuncall (nargs=6, args=0xbffe67a0) at eval.c:2783 #14 0x0816134c in Fbyte_code (bytestr=1750793136, vector=-2007006080, maxdepth=11) at bytecode.c:689 #15 0x08139afe in funcall_lambda (fun=-2007001216, nargs=2, arg_vector=0xbffe68d8) at eval.c:2913 #16 0x081396cd in Ffuncall (nargs=3, args=0xbffe68d4) at eval.c:2783 #17 0x0816134c in Fbyte_code (bytestr=1749507240, vector=-2007216216, maxdepth=4) at bytecode.c:689 #18 0x08139afe in funcall_lambda (fun=-2006137376, nargs=1, arg_vector=0xbffe6aa8) at eval.c:2913 #19 0x081396cd in Ffuncall (nargs=2, args=0xbffe6aa4) at eval.c:2783 #20 0x08138e89 in Fapply (nargs=2, args=0xbffe6aa4) at eval.c:2179 #21 0x08139536 in Ffuncall (nargs=3, args=0xbffe6aa0) at eval.c:2707 #22 0x0816134c in Fbyte_code (bytestr=1750929032, vector=-2008962568, maxdepth=4) at bytecode.c:689 #23 0x08139afe in funcall_lambda (fun=-2007165128, nargs=2, arg_vector=0xbffe6c78) at eval.c:2913 #24 0x081396cd in Ffuncall (nargs=3, args=0xbffe6c74) at eval.c:2783 #25 0x08138e89 in Fapply (nargs=3, args=0xbffe6c74) at eval.c:2179 #26 0x08139536 in Ffuncall (nargs=4, args=0xbffe6c70) at eval.c:2707 #27 0x0816134c in Fbyte_code (bytestr=1750929000, vector=-2006774704, maxdepth=5) at bytecode.c:689 #28 0x08139afe in funcall_lambda (fun=-2007165288, nargs=2, arg_vector=0xbffe6db4) at eval.c:2913 #29 0x081396cd in Ffuncall (nargs=3, args=0xbffe6db0) at eval.c:2783 #30 0x08139332 in call2 (fn=675581880, arg1=675175800, arg2=1753896232) at eval.c:2542 #31 0x081089e7 in Ffile_readable_p (filename=1754131912) at fileio.c:3096 #32 0x081395ca in Ffuncall (nargs=2, args=0xbffe6ea0) at eval.c:2726 #33 0x0816134c in Fbyte_code (bytestr=1749155536, vector=-2006000696, maxdepth=4) at bytecode.c:689 #34 0x08138c3d in Feval (form=-1470614408) at eval.c:2084 #35 0x08137ab9 in Fcondition_case (args=-1466641064) at eval.c:1280 #36 0x081617f6 in Fbyte_code (bytestr=1749155568, vector=-2005992288, maxdepth=3) at bytecode.c:870 #37 0x08139afe in funcall_lambda (fun=-2005992168, nargs=0, arg_vector=0xbffe7204) at eval.c:2913 #38 0x081396cd in Ffuncall (nargs=1, args=0xbffe7200) at eval.c:2783 #39 0x0816134c in Fbyte_code (bytestr=1749162128, vector=-2005992104, maxdepth=4) at bytecode.c:689 #40 0x08138c3d in Feval (form=-1470614256) at eval.c:2084 #41 0x08137ab9 in Fcondition_case (args=-1466641272) at eval.c:1280 #42 0x081617f6 in Fbyte_code (bytestr=1749162336, vector=-2005991920, maxdepth=3) at bytecode.c:870 #43 0x08139afe in funcall_lambda (fun=-2005996208, nargs=0, ---Type <return> to continue, or q <return> to quit--- arg_vector=0xbffe7628) at eval.c:2913 #44 0x081396cd in Ffuncall (nargs=1, args=0xbffe7624) at eval.c:2783 #45 0x08138e60 in Fapply (nargs=2, args=0xbffe7624) at eval.c:2175 #46 0x08139536 in Ffuncall (nargs=3, args=0xbffe7620) at eval.c:2707 #47 0x0816134c in Fbyte_code (bytestr=1747232900, vector=-2010863448, maxdepth=4) at bytecode.c:689 #48 0x08138c3d in Feval (form=-1473992588) at eval.c:2084 #49 0x08137ab9 in Fcondition_case (args=-1466641288) at eval.c:1280 #50 0x081617f6 in Fbyte_code (bytestr=1747232660, vector=-2010863600, maxdepth=5) at bytecode.c:870 #51 0x08139afe in funcall_lambda (fun=-2010863760, nargs=1, arg_vector=0xbffe79b4) at eval.c:2913 #52 0x081396cd in Ffuncall (nargs=2, args=0xbffe79b0) at eval.c:2783 #53 0x08139316 in call1 (fn=675096024, arg1=-2005996080) at eval.c:2520 #54 0x080e6b62 in timer_check (do_it_now=1) at keyboard.c:4404 #55 0x0816733d in wait_reading_process_input (time_limit=1, microsecs=0, read_kbd=0, do_display=0) at process.c:4127 #56 0x08166ae9 in Faccept_process_output (process=-2006691680, timeout=1, timeout_msecs=675044336) at process.c:3774 #57 0x081395fa in Ffuncall (nargs=3, args=0xbffe7cc0) at eval.c:2733 #58 0x0816134c in Fbyte_code (bytestr=1753791640, vector=-2004303512, maxdepth=8) at bytecode.c:689 #59 0x08139afe in funcall_lambda (fun=-2004303232, nargs=0, arg_vector=0xbffe7de4) at eval.c:2913 #60 0x081396cd in Ffuncall (nargs=1, args=0xbffe7de0) at eval.c:2783 #61 0x0816134c in Fbyte_code (bytestr=1753791848, vector=-2004302960, maxdepth=10) at bytecode.c:689 #62 0x08139afe in funcall_lambda (fun=-2004302760, nargs=5, arg_vector=0xbffe7f14) at eval.c:2913 #63 0x081396cd in Ffuncall (nargs=6, args=0xbffe7f10) at eval.c:2783 #64 0x0816134c in Fbyte_code (bytestr=1750793136, vector=-2007006080, maxdepth=11) at bytecode.c:689 #65 0x08139afe in funcall_lambda (fun=-2007001216, nargs=2, arg_vector=0xbffe8048) at eval.c:2913 #66 0x081396cd in Ffuncall (nargs=3, args=0xbffe8044) at eval.c:2783 #67 0x0816134c in Fbyte_code (bytestr=1749507240, vector=-2007216216, maxdepth=4) at bytecode.c:689 #68 0x08139afe in funcall_lambda (fun=-2006137376, nargs=1, arg_vector=0xbffe8218) at eval.c:2913 #69 0x081396cd in Ffuncall (nargs=2, args=0xbffe8214) at eval.c:2783 #70 0x08138e89 in Fapply (nargs=2, args=0xbffe8214) at eval.c:2179 #71 0x08139536 in Ffuncall (nargs=3, args=0xbffe8210) at eval.c:2707 #72 0x0816134c in Fbyte_code (bytestr=1750929032, vector=-2008962568, maxdepth=4) at bytecode.c:689 #73 0x08139afe in funcall_lambda (fun=-2007165128, nargs=2, arg_vector=0xbffe83e8) at eval.c:2913 #74 0x081396cd in Ffuncall (nargs=3, args=0xbffe83e4) at eval.c:2783 #75 0x08138e89 in Fapply (nargs=3, args=0xbffe83e4) at eval.c:2179 #76 0x08139536 in Ffuncall (nargs=4, args=0xbffe83e0) at eval.c:2707 #77 0x0816134c in Fbyte_code (bytestr=1750929000, vector=-2006774704, maxdepth=5) at bytecode.c:689 #78 0x08139afe in funcall_lambda (fun=-2007165288, nargs=2, arg_vector=0xbffe8524) at eval.c:2913 #79 0x081396cd in Ffuncall (nargs=3, args=0xbffe8520) at eval.c:2783 #80 0x08139332 in call2 (fn=675581880, arg1=675175800, arg2=1754438176) at eval.c:2542 #81 0x081089e7 in Ffile_readable_p (filename=1754131912) at fileio.c:3096 #82 0x081395ca in Ffuncall (nargs=2, args=0xbffe8610) at eval.c:2726 #83 0x0816134c in Fbyte_code (bytestr=1749155536, vector=-2006000696, maxdepth=4) at bytecode.c:689 #84 0x08138c3d in Feval (form=-1470614408) at eval.c:2084 #85 0x08137ab9 in Fcondition_case (args=-1466636800) at eval.c:1280 #86 0x081617f6 in Fbyte_code (bytestr=1749155568, vector=-2005992288, ---Type <return> to continue, or q <return> to quit--- maxdepth=3) at bytecode.c:870 #87 0x08139afe in funcall_lambda (fun=-2005992168, nargs=0, arg_vector=0xbffe8974) at eval.c:2913 #88 0x081396cd in Ffuncall (nargs=1, args=0xbffe8970) at eval.c:2783 #89 0x0816134c in Fbyte_code (bytestr=1749162128, vector=-2005992104, maxdepth=4) at bytecode.c:689 #90 0x08138c3d in Feval (form=-1470614256) at eval.c:2084 #91 0x08137ab9 in Fcondition_case (args=-1466637008) at eval.c:1280 #92 0x081617f6 in Fbyte_code (bytestr=1749162336, vector=-2005991920, maxdepth=3) at bytecode.c:870 #93 0x08139afe in funcall_lambda (fun=-2005996208, nargs=0, arg_vector=0xbffe8d98) at eval.c:2913 #94 0x081396cd in Ffuncall (nargs=1, args=0xbffe8d94) at eval.c:2783 #95 0x08138e60 in Fapply (nargs=2, args=0xbffe8d94) at eval.c:2175 #96 0x08139536 in Ffuncall (nargs=3, args=0xbffe8d90) at eval.c:2707 #97 0x0816134c in Fbyte_code (bytestr=1747232900, vector=-2010863448, maxdepth=4) at bytecode.c:689 #98 0x08138c3d in Feval (form=-1473992588) at eval.c:2084 #99 0x08137ab9 in Fcondition_case (args=-1466637024) at eval.c:1280 #100 0x081617f6 in Fbyte_code (bytestr=1747232660, vector=-2010863600, maxdepth=5) at bytecode.c:870 #101 0x08139afe in funcall_lambda (fun=-2010863760, nargs=1, arg_vector=0xbffe9124) at eval.c:2913 #102 0x081396cd in Ffuncall (nargs=2, args=0xbffe9120) at eval.c:2783 #103 0x08139316 in call1 (fn=675096024, arg1=-2005996080) at eval.c:2520 #104 0x080e6b62 in timer_check (do_it_now=1) at keyboard.c:4404 #105 0x0816733d in wait_reading_process_input (time_limit=1, microsecs=0, read_kbd=0, do_display=0) at process.c:4127 #106 0x08166ae9 in Faccept_process_output (process=-2006691680, timeout=1, timeout_msecs=675044336) at process.c:3774 #107 0x081395fa in Ffuncall (nargs=3, args=0xbffe9430) at eval.c:2733 #108 0x0816134c in Fbyte_code (bytestr=1753791640, vector=-2004303512, maxdepth=8) at bytecode.c:689 #109 0x08139afe in funcall_lambda (fun=-2004303232, nargs=0, arg_vector=0xbffe9554) at eval.c:2913 #110 0x081396cd in Ffuncall (nargs=1, args=0xbffe9550) at eval.c:2783 #111 0x0816134c in Fbyte_code (bytestr=1753791848, vector=-2004302960, maxdepth=10) at bytecode.c:689 #112 0x08139afe in funcall_lambda (fun=-2004302760, nargs=6, arg_vector=0xbffe9688) at eval.c:2913 #113 0x081396cd in Ffuncall (nargs=7, args=0xbffe9684) at eval.c:2783 #114 0x0816134c in Fbyte_code (bytestr=1753792024, vector=-2004302696, maxdepth=8) at bytecode.c:689 #115 0x08139afe in funcall_lambda (fun=-2004302528, nargs=9, arg_vector=0xbffe97a4) at eval.c:2913 #116 0x081396cd in Ffuncall (nargs=10, args=0xbffe97a0) at eval.c:2783 #117 0x0816134c in Fbyte_code (bytestr=1750976296, vector=-2006980272, maxdepth=11) at bytecode.c:689 #118 0x08139afe in funcall_lambda (fun=-2006813984, nargs=1, arg_vector=0xbffe9998) at eval.c:2913 #119 0x081396cd in Ffuncall (nargs=2, args=0xbffe9994) at eval.c:2783 #120 0x08138e89 in Fapply (nargs=2, args=0xbffe9994) at eval.c:2179 #121 0x08139536 in Ffuncall (nargs=3, args=0xbffe9990) at eval.c:2707 #122 0x0816134c in Fbyte_code (bytestr=1750929032, vector=-2008962568, maxdepth=4) at bytecode.c:689 #123 0x08139afe in funcall_lambda (fun=-2007165128, nargs=2, arg_vector=0xbffe9b68) at eval.c:2913 #124 0x081396cd in Ffuncall (nargs=3, args=0xbffe9b64) at eval.c:2783 #125 0x08138e89 in Fapply (nargs=3, args=0xbffe9b64) at eval.c:2179 #126 0x08139536 in Ffuncall (nargs=4, args=0xbffe9b60) at eval.c:2707 #127 0x0816134c in Fbyte_code (bytestr=1750929000, vector=-2006774704, maxdepth=5) at bytecode.c:689 #128 0x08139afe in funcall_lambda (fun=-2007165288, nargs=2, ---Type <return> to continue, or q <return> to quit--- arg_vector=0xbffe9c84) at eval.c:2913 #129 0x081396cd in Ffuncall (nargs=3, args=0xbffe9c80) at eval.c:2783 #130 0x0816134c in Fbyte_code (bytestr=1746721772, vector=-2011374580, maxdepth=4) at bytecode.c:689 #131 0x08139afe in funcall_lambda (fun=-2011374648, nargs=1, arg_vector=0xbffe9d94) at eval.c:2913 #132 0x081396cd in Ffuncall (nargs=2, args=0xbffe9d90) at eval.c:2783 #133 0x0816134c in Fbyte_code (bytestr=1750976728, vector=-2007274168, maxdepth=9) at bytecode.c:689 #134 0x08139afe in funcall_lambda (fun=-2007273920, nargs=5, arg_vector=0xbffe9ec4) at eval.c:2913 #135 0x081396cd in Ffuncall (nargs=6, args=0xbffe9ec0) at eval.c:2783 #136 0x08138f9e in Fapply (nargs=2, args=0xbffe9fa4) at eval.c:2231 #137 0x08139536 in Ffuncall (nargs=3, args=0xbffe9fa0) at eval.c:2707 #138 0x0816134c in Fbyte_code (bytestr=1750929032, vector=-2008962568, maxdepth=4) at bytecode.c:689 #139 0x08139afe in funcall_lambda (fun=-2007165128, nargs=6, arg_vector=0xbffea0b4) at eval.c:2913 #140 0x081396cd in Ffuncall (nargs=7, args=0xbffea0b0) at eval.c:2783 #141 0x08138f9e in Fapply (nargs=3, args=0xbffea194) at eval.c:2231 #142 0x08139536 in Ffuncall (nargs=4, args=0xbffea190) at eval.c:2707 #143 0x0816134c in Fbyte_code (bytestr=1750929000, vector=-2006774704, maxdepth=5) at bytecode.c:689 #144 0x08139afe in funcall_lambda (fun=-2007165288, nargs=6, arg_vector=0xbffea2d4) at eval.c:2913 #145 0x081396cd in Ffuncall (nargs=7, args=0xbffea2d0) at eval.c:2783 #146 0x081393a2 in call6 (fn=675581880, arg1=675177144, arg2=1754430920, arg3=675044384, arg4=675044336, arg5=675044336, arg6=675044336) at eval.c:2640 #147 0x0810974a in Finsert_file_contents (filename=1754430920, visit=675044384, beg=675044336, end=675044336, replace=675044336) at fileio.c:3719 #148 0x08139650 in Ffuncall (nargs=3, args=0xbfffea40) at eval.c:2759 #149 0x0816134c in Fbyte_code (bytestr=1746734708, vector=-2011361640, maxdepth=3) at bytecode.c:689 #150 0x08138c3d in Feval (form=-1474490780) at eval.c:2084 #151 0x08137ab9 in Fcondition_case (args=-1466648624) at eval.c:1280 #152 0x081617f6 in Fbyte_code (bytestr=1746734104, vector=-2011362084, maxdepth=4) at bytecode.c:870 #153 0x08139afe in funcall_lambda (fun=-2011362352, nargs=6, arg_vector=0xbfffeda4) at eval.c:2913 #154 0x081396cd in Ffuncall (nargs=7, args=0xbfffeda0) at eval.c:2783 #155 0x0816134c in Fbyte_code (bytestr=1746731576, vector=-2011364140, maxdepth=8) at bytecode.c:689 #156 0x08139afe in funcall_lambda (fun=-2011364876, nargs=4, arg_vector=0xbfffeec4) at eval.c:2913 #157 0x081396cd in Ffuncall (nargs=5, args=0xbfffeec0) at eval.c:2783 #158 0x0816134c in Fbyte_code (bytestr=1746725796, vector=-2011370544, maxdepth=6) at bytecode.c:689 #159 0x08139afe in funcall_lambda (fun=-2011370644, nargs=2, arg_vector=0xbfffefe4) at eval.c:2913 #160 0x081396cd in Ffuncall (nargs=3, args=0xbfffefe0) at eval.c:2783 #161 0x08138f9e in Fapply (nargs=2, args=0xbffff070) at eval.c:2231 #162 0x081392df in apply1 (fn=675120712, arg=-1466675088) at eval.c:2487 #163 0x08135371 in Fcall_interactively (function=675120712, record_flag=675044336, keys=-2009253376) at callint.c:406 #164 0x080ecb6a in Fcommand_execute (cmd=675120712, record_flag=675044336, keys=675044336, special=675044336) at keyboard.c:9670 #165 0x080e315d in command_loop_1 () at keyboard.c:1727 #166 0x08137baa in internal_condition_case (bfun=0x80e2424 <command_loop_1>, handlers=675105248, hfun=0x80e2030 <cmd_error>) at eval.c:1333 #167 0x080e22fa in command_loop_2 () at keyboard.c:1264 #168 0x0813774b in internal_catch (tag=675099264, ---Type <return> to continue, or q <return> to quit--- func=0x80e22dc <command_loop_2>, arg=675044336) at eval.c:1094 #169 0x080e2288 in command_loop () at keyboard.c:1243 #170 0x080e1e13 in recursive_edit_1 () at keyboard.c:959 #171 0x080e1f2b in Frecursive_edit () at keyboard.c:1015 #172 0x080e0e73 in main (argc=4, argv=0xbffff814) at emacs.c:1692 #173 0x40317627 in __libc_start_main (main=0x80e0194 <main>, argc=4, ubp_av=0xbffff814, init=0x804e1b0 <_init>, fini=0x817f698 <_fini>, rtld_fini=0x4000dcd4 <_dl_fini>, stack_end=0xbffff80c) at ../sysdeps/generic/libc-start.c:129 (gdb) ============================================================ ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-12 23:26 ` Luc Teirlinck @ 2004-05-13 23:11 ` Kim F. Storm 2004-05-13 23:24 ` Luc Teirlinck ` (2 more replies) 0 siblings, 3 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-13 23:11 UTC (permalink / raw) Cc: kai, emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > Here is the complete backtrace of the crash: Always include an xbacktrace please! Some observations: > #31 0x081089e7 in Ffile_readable_p (filename=1754131912) at fileio.c:3096 Calls a tramp handler? > #53 0x08139316 in call1 (fn=675096024, arg1=-2005996080) at eval.c:2520 > #54 0x080e6b62 in timer_check (do_it_now=1) at keyboard.c:4404 > #55 0x0816733d in wait_reading_process_input (time_limit=1, microsecs=0, > read_kbd=0, do_display=0) at process.c:4127 > #56 0x08166ae9 in Faccept_process_output (process=-2006691680, timeout=1, > timeout_msecs=675044336) at process.c:3774 We are inside a timer handler here: That timer handler (at some point) calls accept-process-output, which calls wait_reading_process_input, which may run timers (and does so). > #81 0x081089e7 in Ffile_readable_p (filename=1754131912) at fileio.c:3096 We are inside a timer handler here: I suppose this calls a tramp handler. > #104 0x080e6b62 in timer_check (do_it_now=1) at keyboard.c:4404 > #105 0x0816733d in wait_reading_process_input (time_limit=1, microsecs=0, > read_kbd=0, do_display=0) at process.c:4127 > #106 0x08166ae9 in Faccept_process_output (process=-2006691680, timeout=1, > timeout_msecs=675044336) at process.c:3774 Tramp handler calls accept-process-output, which calls wait_reading_process_input, which may run timers (and does so). > #147 0x0810974a in Finsert_file_contents (filename=1754430920, > visit=675044384, beg=675044336, end=675044336, replace=675044336) > at fileio.c:3719 I suppose this calls a tramp handler. > #164 0x080ecb6a in Fcommand_execute (cmd=675120712, record_flag=675044336, > keys=675044336, special=675044336) at keyboard.c:9670 I suppose you did C-x C-f ? So we in three levels of tramp handlers and two levels of accept-process-output, wait_reading_process_input, and timer_check. I just installed a change to make wait_reading_process_input reentrant which may or may not be relevant to this crash. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-13 23:11 ` Kim F. Storm @ 2004-05-13 23:24 ` Luc Teirlinck 2004-05-13 23:46 ` Kim F. Storm 2004-05-14 21:02 ` Richard Stallman 2004-05-14 0:54 ` Luc Teirlinck 2004-05-14 2:13 ` Luc Teirlinck 2 siblings, 2 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-13 23:24 UTC (permalink / raw) Cc: kai, emacs-devel Kim Storm wrote: Always include an xbacktrace please! (gdb) xbacktrace Invalid number -2147483630 of repetitions. > #31 0x081089e7 in Ffile_readable_p (filename=1754131912) at fileio.c:3096 Calls a tramp handler? Yes. We are inside a timer handler here: That timer handler (at some point) calls accept-process-output, which calls wait_reading_process_input, which may run timers (and does so). > #81 0x081089e7 in Ffile_readable_p (filename=1754131912) at fileio.c:3096 We are inside a timer handler here: I suppose this calls a tramp handler. global-autorevert-mode is active. It calls file-readable-p on a remote file. This call gets handled by Tramp. > #147 0x0810974a in Finsert_file_contents (filename=1754430920, > visit=675044384, beg=675044336, end=675044336, replace=675044336) > at fileio.c:3719 I suppose this calls a tramp handler. Yes. I suppose you did C-x C-f ? Yes. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-13 23:24 ` Luc Teirlinck @ 2004-05-13 23:46 ` Kim F. Storm 2004-05-14 0:08 ` Luc Teirlinck 2004-05-14 21:02 ` Richard Stallman 1 sibling, 1 reply; 95+ messages in thread From: Kim F. Storm @ 2004-05-13 23:46 UTC (permalink / raw) Cc: kai, emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > Kim Storm wrote: > > Always include an xbacktrace please! > > (gdb) xbacktrace > Invalid number -2147483630 of repetitions. Well :-( > > We are inside a timer handler here: > > I suppose this calls a tramp handler. > > global-autorevert-mode is active. It calls file-readable-p on a > remote file. This call gets handled by Tramp. Does this indicate that with global-autorevert-mode on, there is a higher probability that tramp (or other things activated through a timer handler) will be called recusively? What is the value of Vtimer_list and Vtimer_idle_list? Do: (gdb) p Vtimer_list (gdb) pr (gdb) p Vtimer_idle_list (gdb) pr -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-13 23:46 ` Kim F. Storm @ 2004-05-14 0:08 ` Luc Teirlinck 2004-05-14 1:17 ` Stefan Monnier 0 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 0:08 UTC (permalink / raw) Cc: kai, emacs-devel Kim Storm wrote: Does this indicate that with global-autorevert-mode on, there is a higher probability that tramp (or other things activated through a timer handler) will be called recusively? I do not see why global-auto-revert-mode should increase the probability of Tramp being recalled recursively. It certainly guarantees that Tramp will be called very often. global-auto-revert-mode runs by default every five seconds and invoking Tramp on a slow connection (like mine) can easily take more than five seconds. I believe that I will put in a user option allowing to disable reverting of remote files by global-auto-revert-mode. If one has a slow connection, it just causes too much trouble, regardless of whether it is responsible for this crash. What is the value of Vtimer_list and Vtimer_idle_list? Do: (gdb) p Vtimer_list (gdb) pr (gdb) p Vtimer_idle_list (gdb) pr (gdb) p Vtimer_list $8 = -1466641304 (gdb) pr ([]) (gdb) p Vtimer_idle_list $9 = 675044336 (gdb) pr nil That does not seem right. Could this data have been corrupted? Maybe I am misunderstanding this. Several timers and idle-timers should have been active. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 0:08 ` Luc Teirlinck @ 2004-05-14 1:17 ` Stefan Monnier 2004-05-14 1:32 ` Luc Teirlinck ` (2 more replies) 0 siblings, 3 replies; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 1:17 UTC (permalink / raw) Cc: kai, emacs-devel, storm > I do not see why global-auto-revert-mode should increase the > probability of Tramp being recalled recursively. It certainly Because it runs Tramp from a timer. Timers can be run whenever Emacs is waiting, i.e. it can happen when Tramp is waiting for the other end's prompt to come up. Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 1:17 ` Stefan Monnier @ 2004-05-14 1:32 ` Luc Teirlinck 2004-05-14 2:35 ` Stefan Monnier 2004-05-14 21:02 ` Richard Stallman 2004-05-14 2:31 ` Luc Teirlinck 2004-05-14 11:36 ` Kai Grossjohann 2 siblings, 2 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 1:32 UTC (permalink / raw) Cc: kai, emacs-devel, storm Stefan Monnier wrote: > I do not see why global-auto-revert-mode should increase the > probability of Tramp being recalled recursively. It certainly Because it runs Tramp from a timer. Timers can be run whenever Emacs is waiting, i.e. it can happen when Tramp is waiting for the other end's prompt to come up. So is this sufficient of a problem to just disable auto-reverting of remote files completely? The problem I am experiencing now is definitely bad enough that it should be disabled by default. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 1:32 ` Luc Teirlinck @ 2004-05-14 2:35 ` Stefan Monnier 2004-05-14 2:53 ` Luc Teirlinck 2004-05-14 3:08 ` Luc Teirlinck 2004-05-14 21:02 ` Richard Stallman 1 sibling, 2 replies; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 2:35 UTC (permalink / raw) Cc: kai, emacs-devel, storm >> I do not see why global-auto-revert-mode should increase the >> probability of Tramp being recalled recursively. It certainly > Because it runs Tramp from a timer. Timers can be run whenever Emacs is > waiting, i.e. it can happen when Tramp is waiting for the other end's > prompt to come up. > So is this sufficient of a problem to just disable auto-reverting of > remote files completely? The problem I am experiencing now is > definitely bad enough that it should be disabled by default. Let's first try to *fix* bugs. Hiding them should be left for a last-resort when all else fails. Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 2:35 ` Stefan Monnier @ 2004-05-14 2:53 ` Luc Teirlinck 2004-05-14 3:08 ` Luc Teirlinck 1 sibling, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 2:53 UTC (permalink / raw) Cc: kai, emacs-devel, storm Stefan Monnier wrote: Let's first try to *fix* bugs. Hiding them should be left for a last-resort when all else fails. OK, I will wait and _not_ commit the patch I proposed right now. But I still wonder how it can possibly make sense to carry out every five seconds an operation that usually takes longer than five seconds. Probably the crash can be fixed, but the crash is not the only bug. There are freezes. `with-local-quit' does not really help. Things refreeze 0-5 seconds later. I just come to have a relatively prolonged period where I not only could not use Emacs any more, I had a hard time to do C-x C-c and then press `y' quickly enough to kill Emacs. My patch is motivated by these freezes. It is _not_ intended to "hide" crashes. I believe there should at least be an option to disable auto-reverting of remote files. I also believe disabling should be the default, although that might be less clear. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 2:35 ` Stefan Monnier 2004-05-14 2:53 ` Luc Teirlinck @ 2004-05-14 3:08 ` Luc Teirlinck 2004-05-14 4:16 ` Stefan Monnier 1 sibling, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 3:08 UTC (permalink / raw) Cc: kai, storm, emacs-devel >From my previous message: Probably the crash can be fixed, but the crash is not the only bug. I meant: Probably the crash can be fixed, but the crash is not the only _problem_. I believe that the freezes are not an Emacs or Tramp bug, but the inevitable result of a slow connection. Hence we need a user option to deal with them. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 3:08 ` Luc Teirlinck @ 2004-05-14 4:16 ` Stefan Monnier 2004-05-14 4:45 ` Luc Teirlinck ` (2 more replies) 0 siblings, 3 replies; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 4:16 UTC (permalink / raw) Cc: kai, storm, emacs-devel > I believe that the freezes are not an Emacs or Tramp bug, but the > inevitable result of a slow connection. Hence we need a user option > to deal with them. If C-g does not get you out of the hang, it's a bug. As I said, the with-local-quit should be put in Tramp. You might be right that auto-reverting remote files needs to be turned off or customizable, but the problems you're experiencing could also be triggered by other packages than auto-revert, so we should fix them. Among all the problems, one of them is actually in autorevert.el: the auto-revert timer should not be re-run if it hasn't finished running yet. One way to do that is to not use a repeating timer, but instead to reset the timer manually at the end of auto-revert-buffers. Another is to bind auto-revert-running to t in auto-revert-buffers and check it before running, as in the patch below. A third option is to do this kind of re-entrance-check directly in the C code. Stefan --- orig/lisp/autorevert.el +++ mod/lisp/autorevert.el @@ -1,6 +1,6 @@ ;;; autorevert.el --- revert buffers when files on disk change -;; Copyright (C) 1997, 1998, 1999, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1997, 98, 1999, 2001, 2004 Free Software Foundation, Inc. ;; Author: Anders Lindgren <andersl@andersl.com> ;; Keywords: convenience @@ -343,7 +343,7 @@ ;; do want to reset the mode for VC, so we do it manually. (when (or revert auto-revert-check-vc-info) (vc-find-file-hook))))) - +(defvar auto-revert-running nil) (defun auto-revert-buffers () "Revert buffers as specified by Auto-Revert and Global Auto-Revert Mode. @@ -367,9 +367,13 @@ This function is also responsible for removing buffers no longer in Auto-Revert mode from `auto-revert-buffer-list', and for canceling the timer when no buffers need to be checked." + (if auto-revert-running + ;; Don't re-run if we're not finished executing the previous run. + nil (let ((bufs (if global-auto-revert-mode (buffer-list) auto-revert-buffer-list)) + (auto-revert-running t) (remaining '()) (new '())) ;; Partition `bufs' into two halves depending on whether or not @@ -405,7 +409,7 @@ (when (and (not global-auto-revert-mode) (null auto-revert-buffer-list)) (cancel-timer auto-revert-timer) - (setq auto-revert-timer nil)))) + (setq auto-revert-timer nil))))) ;; The end: ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 4:16 ` Stefan Monnier @ 2004-05-14 4:45 ` Luc Teirlinck 2004-05-14 5:09 ` Stefan Monnier 2004-05-14 21:02 ` Richard Stallman 2004-05-14 5:01 ` Luc Teirlinck 2004-05-14 23:00 ` Kim F. Storm 2 siblings, 2 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 4:45 UTC (permalink / raw) Cc: kai, storm, emacs-devel Stefan Monnier wrote: If C-g does not get you out of the hang, it's a bug. As I said, the with-local-quit should be put in Tramp. I put in with-local-quits in my private Emacs. C-g does get me out of the hang, but for 0 to 5 seconds. That is no big help. I never was able to check the problem with more than one file, because trying to open a second remote file produces a crash. With global-auto-revert-remote-files set to nil I opened five remote files and worked with them without problems. Then I tried to set global-auto-revert-remote-files to t. Immediate freeze. To be able to use Tramp efficiently, there should be no problems having ten or more remote files open at the same time. I will try out your patch tomorrow. From looking at it, it is probably going to be an improvement, but I doubt that it is going to solve all my problems. I will check. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 4:45 ` Luc Teirlinck @ 2004-05-14 5:09 ` Stefan Monnier 2004-05-14 19:13 ` Luc Teirlinck 2004-05-14 21:02 ` Richard Stallman 1 sibling, 1 reply; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 5:09 UTC (permalink / raw) Cc: kai, storm, emacs-devel > I put in with-local-quits in my private Emacs. C-g does get me out of > the hang, but for 0 to 5 seconds. That is no big help. I see. A misbehavior, but not a clearcut bug indeed. > I never was able to check the problem with more than one file, because > trying to open a second remote file produces a crash. That one is a bug ;-) > I will try out your patch tomorrow. From looking at it, it is > probably going to be an improvement, but I doubt that it is going to > solve all my problems. I will check. I don't think it'll fix your problems. But if we want to support remote files with auto-revert, we'll need something like that patch (after we've fixed the crashes). Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 5:09 ` Stefan Monnier @ 2004-05-14 19:13 ` Luc Teirlinck 0 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 19:13 UTC (permalink / raw) Cc: kai, emacs-devel, storm Stefan Monnier wrote: > I will try out your patch tomorrow. From looking at it, it is > probably going to be an improvement, but I doubt that it is going to > solve all my problems. I will check. I don't think it'll fix your problems. But if we want to support remote files with auto-revert, we'll need something like that patch (after we've fixed the crashes). As you already expected, it did not fix my problems. I actually now seem to get much more frequent freezes and crashes. (Tramp is currently outright unusable for me with auto-reverting of remote files enabled.) This can not be due to your patch, however. Maybe setting tramp-chunksize to 500 slowed things down, or maybe my connection got temporarily worse again. Of course, Lars reported crashes using Tramp and he is _not_ using auto-revert. I have never seen any of my problems when auto-reverting of remote files is disabled or when auto-revert is not active. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 4:45 ` Luc Teirlinck 2004-05-14 5:09 ` Stefan Monnier @ 2004-05-14 21:02 ` Richard Stallman 1 sibling, 0 replies; 95+ messages in thread From: Richard Stallman @ 2004-05-14 21:02 UTC (permalink / raw) Cc: kai, emacs-devel, monnier, storm I think that Finsert_file_contents does not allow quitting from within read. The reason is that there was no way to make things consistent after a quit. It's possible that that problem was in the case of NFS. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 4:16 ` Stefan Monnier 2004-05-14 4:45 ` Luc Teirlinck @ 2004-05-14 5:01 ` Luc Teirlinck 2004-05-14 23:00 ` Kim F. Storm 2 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 5:01 UTC (permalink / raw) Cc: kai, emacs-devel, storm >From my previous message: I never was able to check the problem with more than one file, because trying to open a second remote file produces a crash. With global-auto-revert-remote-files set to nil I opened five remote files and worked with them without problems. Then I tried to set global-auto-revert-remote-files to t. Immediate freeze. Well, immediate freeze after entering my password. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 4:16 ` Stefan Monnier 2004-05-14 4:45 ` Luc Teirlinck 2004-05-14 5:01 ` Luc Teirlinck @ 2004-05-14 23:00 ` Kim F. Storm 2004-05-15 0:44 ` Luc Teirlinck ` (4 more replies) 2 siblings, 5 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-14 23:00 UTC (permalink / raw) Cc: kai, Luc Teirlinck, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: > > I believe that the freezes are not an Emacs or Tramp bug, but the > > inevitable result of a slow connection. Hence we need a user option > > to deal with them. > > If C-g does not get you out of the hang, it's a bug. > As I said, the with-local-quit should be put in Tramp. > You might be right that auto-reverting remote files needs to be turned off > or customizable, but the problems you're experiencing could also be > triggered by other packages than auto-revert, so we should fix them. > > Among all the problems, one of them is actually in autorevert.el: > the auto-revert timer should not be re-run if it hasn't finished running > yet. One way to do that is to not use a repeating timer, but instead to > reset the timer manually at the end of auto-revert-buffers. Another is to > bind auto-revert-running to t in auto-revert-buffers and check it before > running, as in the patch below. A third option is to do this kind of > re-entrance-check directly in the C code. The C code actually does this, but the lisp handler breaks this. I will install a patch shortly. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 23:00 ` Kim F. Storm @ 2004-05-15 0:44 ` Luc Teirlinck 2004-05-15 1:39 ` Luc Teirlinck ` (3 subsequent siblings) 4 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 0:44 UTC (permalink / raw) Cc: kai, monnier, emacs-devel Kim Storm wrote: The C code actually does this, but the lisp handler breaks this. I will install a patch shortly. I now realize that I should have read etc/DEBUG more carefully before impatiently starting to go ahead. I believe I now understand what I should have done. Anyway, I will first see whether the crash still occurs after your latest changes to timer.el and, if so, try to produce a Lisp backtrace for that one. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 23:00 ` Kim F. Storm 2004-05-15 0:44 ` Luc Teirlinck @ 2004-05-15 1:39 ` Luc Teirlinck 2004-05-15 18:34 ` Richard Stallman 2004-05-15 2:50 ` Luc Teirlinck ` (2 subsequent siblings) 4 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 1:39 UTC (permalink / raw) Cc: kai, monnier, emacs-devel Kim Storm wrote: The C code actually does this, but the lisp handler breaks this. I will install a patch shortly. Interesting. Now I was able to load four remote files, without any problems. No crash, no base64 error messages. Then I do M-x customize-group RET auto-revert to check whether I did not accidentally change some option. Crash. Here is a C backtace. I will try to produce a Lisp backtrace manually. This time I will not try any more to come up with the name of a function object that has no name. I hope xbacktrace does not try to that too, but anyway, it again does not work. ===File ~/crash3============================================ (gdb) run -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Starting program: /home/teirllm/emacscvsdir/emacs/src/emacs-21.3.50.1 -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Breakpoint 1, abort () at emacs.c:433 433 kill (getpid (), SIGABRT); (gdb) xbacktrace Invalid number -2147483625 of repetitions. (gdb) bt #0 abort () at emacs.c:433 #1 0x0812a575 in mark_object (arg=144520658) at alloc.c:5034 #2 0x0812a5d6 in mark_object (arg=144315413) at alloc.c:5051 #3 0x0812a5d6 in mark_object (arg=144310277) at alloc.c:5051 #4 0x0812948a in mark_memory (start=0xbfffc780, end=0xbffff57c) at alloc.c:3781 #5 0x081294f5 in mark_stack () at alloc.c:4055 #6 0x08129aba in Fgarbage_collect () at alloc.c:4429 #7 0x0813c887 in Ffuncall (nargs=3, args=0xbfffc918) at eval.c:2666 #8 0x08165c50 in Fbyte_code (bytestr=143196355, vector=143198068, maxdepth=64) at bytecode.c:689 #9 0x0813cf6f in funcall_lambda (fun=143198276, nargs=1, arg_vector=0xbfffca44) at eval.c:2913 #10 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffca40) at eval.c:2783 #11 0x08165c50 in Fbyte_code (bytestr=143219675, vector=143221980, maxdepth=48) at bytecode.c:689 #12 0x0813cf6f in funcall_lambda (fun=143222156, nargs=1, arg_vector=0xbfffcb74) at eval.c:2913 #13 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffcb70) at eval.c:2783 #14 0x08165c50 in Fbyte_code (bytestr=143100619, vector=140058860, maxdepth=24) at bytecode.c:689 #15 0x0813cf6f in funcall_lambda (fun=140058084, nargs=1, arg_vector=0xbfffcc94) at eval.c:2913 #16 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffcc90) at eval.c:2783 #17 0x08165c50 in Fbyte_code (bytestr=143100651, vector=140057732, maxdepth=40) at bytecode.c:689 #18 0x0813cf6f in funcall_lambda (fun=140821156, nargs=3, arg_vector=0xbfffcde4) at eval.c:2913 #19 0x0813cb45 in Ffuncall (nargs=4, args=0xbfffcde0) at eval.c:2783 #20 0x0813c7d2 in call3 (fn=138573993, arg1=138326689, arg2=144357203, arg3=140947419) at eval.c:2565 #21 0x0810951f in Fexpand_file_name (name=144357203, default_directory=140947419) at fileio.c:1705 #22 0x0810ae74 in Ffile_readable_p (filename=144357203) at fileio.c:3090 #23 0x0813ca53 in Ffuncall (nargs=2, args=0xbfffcf20) at eval.c:2726 #24 0x08165c50 in Fbyte_code (bytestr=138319363, vector=141527212, maxdepth=40) at bytecode.c:689 #25 0x0813cf6f in funcall_lambda (fun=141527404, nargs=1, arg_vector=0xbfffd054) at eval.c:2913 #26 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffd050) at eval.c:2783 #27 0x08165c50 in Fbyte_code (bytestr=143400275, vector=143770820, maxdepth=56) at bytecode.c:689 #28 0x0813cf6f in funcall_lambda (fun=143709916, nargs=1, arg_vector=0xbfffd184) at eval.c:2913 #29 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffd180) at eval.c:2783 #30 0x08165c50 in Fbyte_code (bytestr=143400291, vector=143308492, maxdepth=48) at bytecode.c:689 #31 0x0813cf6f in funcall_lambda (fun=143628260, nargs=4, arg_vector=0xbfffd2b4) at eval.c:2913 #32 0x0813cb45 in Ffuncall (nargs=5, args=0xbfffd2b0) at eval.c:2783 #33 0x08165c50 in Fbyte_code (bytestr=143579067, vector=143742476, maxdepth=48) at bytecode.c:689 #34 0x0813cf6f in funcall_lambda (fun=143361260, nargs=1, arg_vector=0xbfffd464) at eval.c:2913 #35 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffd460) at eval.c:2783 #36 0x0813c2ba in Fapply (nargs=3, args=0xbfffd460) at eval.c:2175 #37 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffd4f4) at fns.c:3519 #38 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffd4f0) at eval.c:2707 #39 0x08165c50 in Fbyte_code (bytestr=143523147, vector=144170052, maxdepth=72) at bytecode.c:689 #40 0x0813cf6f in funcall_lambda (fun=143300308, nargs=1, arg_vector=0xbfffd6b4) at eval.c:2913 #41 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffd6b0) at eval.c:2783 ---Type <return> to continue, or q <return> to quit--- #42 0x0813c2ba in Fapply (nargs=3, args=0xbfffd6b0) at eval.c:2175 #43 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffd744) at fns.c:3519 #44 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffd740) at eval.c:2707 #45 0x08165c50 in Fbyte_code (bytestr=143285115, vector=143742332, maxdepth=56) at bytecode.c:689 #46 0x0813cf6f in funcall_lambda (fun=143629564, nargs=11, arg_vector=0xbfffd874) at eval.c:2913 #47 0x0813cb45 in Ffuncall (nargs=12, args=0xbfffd870) at eval.c:2783 #48 0x08165c50 in Fbyte_code (bytestr=143578795, vector=143367724, maxdepth=136) at bytecode.c:689 #49 0x0813cf6f in funcall_lambda (fun=143478244, nargs=1, arg_vector=0xbfffda54) at eval.c:2913 #50 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffda50) at eval.c:2783 #51 0x0813c2ba in Fapply (nargs=3, args=0xbfffda50) at eval.c:2175 #52 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffdae4) at fns.c:3519 #53 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffdae0) at eval.c:2707 #54 0x08165c50 in Fbyte_code (bytestr=143523147, vector=144170052, maxdepth=72) at bytecode.c:689 #55 0x0813cf6f in funcall_lambda (fun=143300308, nargs=1, arg_vector=0xbfffdca4) at eval.c:2913 #56 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffdca0) at eval.c:2783 #57 0x0813c2ba in Fapply (nargs=3, args=0xbfffdca0) at eval.c:2175 #58 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffdd34) at fns.c:3519 #59 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffdd30) at eval.c:2707 #60 0x08165c50 in Fbyte_code (bytestr=143285115, vector=143742332, maxdepth=56) at bytecode.c:689 #61 0x0813cf6f in funcall_lambda (fun=143629564, nargs=12, arg_vector=0xbfffde64) at eval.c:2913 #62 0x0813cb45 in Ffuncall (nargs=13, args=0xbfffde60) at eval.c:2783 #63 0x08165c50 in Fbyte_code (bytestr=143832635, vector=143834484, maxdepth=104) at bytecode.c:689 #64 0x0813cf6f in funcall_lambda (fun=143834676, nargs=1, arg_vector=0xbfffdfd4) at eval.c:2913 #65 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffdfd0) at eval.c:2783 #66 0x0813c79a in call1 (fn=143834676, arg1=139739749) at eval.c:2520 #67 0x08145264 in mapcar1 (leni=12, vals=0xbfffe050, fn=143834676, seq=143939629) at fns.c:2962 #68 0x08145347 in Fmapcar (function=143834676, sequence=143939629) at fns.c:3022 #69 0x0813ca66 in Ffuncall (nargs=3, args=0xbfffe110) at eval.c:2729 #70 0x08165c50 in Fbyte_code (bytestr=143832059, vector=143834740, maxdepth=144) at bytecode.c:689 #71 0x0813cf6f in funcall_lambda (fun=143835340, nargs=1, arg_vector=0xbfffe2f4) at eval.c:2913 #72 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffe2f0) at eval.c:2783 #73 0x0813c2ba in Fapply (nargs=3, args=0xbfffe2f0) at eval.c:2175 #74 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffe384) at fns.c:3519 #75 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffe380) at eval.c:2707 #76 0x08165c50 in Fbyte_code (bytestr=143523147, vector=144170052, maxdepth=72) at bytecode.c:689 #77 0x0813cf6f in funcall_lambda (fun=143300308, nargs=1, arg_vector=0xbfffe544) at eval.c:2913 #78 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffe540) at eval.c:2783 #79 0x0813c2ba in Fapply (nargs=3, args=0xbfffe540) at eval.c:2175 #80 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffe5d4) at fns.c:3519 #81 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffe5d0) at eval.c:2707 #82 0x08165c50 in Fbyte_code (bytestr=143523163, vector=143308404, maxdepth=32) at bytecode.c:689 #83 0x0813cf6f in funcall_lambda (fun=143629436, nargs=9, arg_vector=0xbfffe6f4) at eval.c:2913 #84 0x0813cb45 in Ffuncall (nargs=10, args=0xbfffe6f0) at eval.c:2783 #85 0x08165c50 in Fbyte_code (bytestr=143386083, vector=143794796, maxdepth=80) at bytecode.c:689 ---Type <return> to continue, or q <return> to quit--- #86 0x0813cf6f in funcall_lambda (fun=143794940, nargs=1, arg_vector=0xbfffe854) at eval.c:2913 #87 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffe850) at eval.c:2783 #88 0x0813c79a in call1 (fn=143794940, arg1=143939725) at eval.c:2520 #89 0x08145264 in mapcar1 (leni=1, vals=0xbfffe8d0, fn=143794940, seq=143939717) at fns.c:2962 #90 0x08145347 in Fmapcar (function=143794940, sequence=143939717) at fns.c:3022 #91 0x0813ca66 in Ffuncall (nargs=3, args=0xbfffe970) at eval.c:2729 #92 0x08165c50 in Fbyte_code (bytestr=143303011, vector=143229492, maxdepth=80) at bytecode.c:689 #93 0x0813cf6f in funcall_lambda (fun=143795260, nargs=2, arg_vector=0xbfffeab4) at eval.c:2913 #94 0x0813cb45 in Ffuncall (nargs=3, args=0xbfffeab0) at eval.c:2783 #95 0x08165c50 in Fbyte_code (bytestr=143303203, vector=143793340, maxdepth=24) at bytecode.c:689 #96 0x0813cf6f in funcall_lambda (fun=143793476, nargs=3, arg_vector=0xbfffebd4) at eval.c:2913 #97 0x0813cb45 in Ffuncall (nargs=4, args=0xbfffebd0) at eval.c:2783 #98 0x08165c50 in Fbyte_code (bytestr=143363443, vector=143788396, maxdepth=48) at bytecode.c:689 #99 0x0813cf6f in funcall_lambda (fun=143790948, nargs=1, arg_vector=0xbfffed84) at eval.c:2913 #100 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffed80) at eval.c:2783 #101 0x0813c2de in Fapply (nargs=2, args=0xbfffed80) at eval.c:2179 #102 0x0813c763 in apply1 (fn=138503777, arg=143949915) at eval.c:2487 #103 0x081385a5 in Fcall_interactively (function=138503777, record_flag=138193537, keys=138250348) at callint.c:406 #104 0x080ee5dd in Fcommand_execute (cmd=138503777, record_flag=138193537, keys=138193489, special=138193489) at keyboard.c:9670 #105 0x080ee84e in Fexecute_extended_command (prefixarg=138193489) at keyboard.c:9781 #106 0x0813ca53 in Ffuncall (nargs=2, args=0xbffff070) at eval.c:2726 #107 0x081394c9 in Fcall_interactively (function=138250769, record_flag=17274186, keys=138250348) at callint.c:862 #108 0x080ee5dd in Fcommand_execute (cmd=138250769, record_flag=138193489, keys=138193489, special=138193489) at keyboard.c:9670 #109 0x080e4963 in command_loop_1 () at keyboard.c:1727 #110 0x0813afb6 in internal_condition_case (bfun=0x80e3a90 <command_loop_1>, handlers=138254417, hfun=0x80e3674 <cmd_error>) at eval.c:1333 #111 0x080e394e in command_loop_2 () at keyboard.c:1264 #112 0x0813ab27 in internal_catch (tag=138248441, func=0x80e3930 <command_loop_2>, arg=138193489) at eval.c:1094 #113 0x080e38dc in command_loop () at keyboard.c:1243 #114 0x080e345b in recursive_edit_1 () at keyboard.c:959 #115 0x080e356f in Frecursive_edit () at keyboard.c:1015 #116 0x080e24ab in main (argc=4, argv=0xbffff814) at emacs.c:1692 #117 0x40317627 in __libc_start_main (main=0x80e17d4 <main>, argc=4, ubp_av=0xbffff814, init=0x804e1b0 <_init>, fini=0x81845fc <_fini>, rtld_fini=0x4000dcd4 <_dl_fini>, stack_end=0xbffff80c) at ../sysdeps/generic/libc-start.c:129 (gdb) ============================================================ ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 1:39 ` Luc Teirlinck @ 2004-05-15 18:34 ` Richard Stallman 2004-05-15 20:44 ` Luc Teirlinck 0 siblings, 1 reply; 95+ messages in thread From: Richard Stallman @ 2004-05-15 18:34 UTC (permalink / raw) Cc: kai, emacs-devel, monnier, storm #0 abort () at emacs.c:433 #1 0x0812a575 in mark_object (arg=144520658) at alloc.c:5034 #2 0x0812a5d6 in mark_object (arg=144315413) at alloc.c:5051 #3 0x0812a5d6 in mark_object (arg=144310277) at alloc.c:5051 #4 0x0812948a in mark_memory (start=0xbfffc780, end=0xbffff57c) at alloc.c:3781 #5 0x081294f5 in mark_stack () at alloc.c:4055 Can you figure out which slot, in which stack frame, is currently being examined within mark_stack? That would probably lead us to the C level bug that directly causes these crashes. If we make changes at the Lisp level, the C-level bug may no longer happen often in this way, but it will still remain and may cause occasional crashes on other occasions. So please try to debug it now while the Lisp code still triggers it. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 18:34 ` Richard Stallman @ 2004-05-15 20:44 ` Luc Teirlinck 2004-05-15 23:44 ` Luc Teirlinck 2004-05-16 5:58 ` Eli Zaretskii 0 siblings, 2 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 20:44 UTC (permalink / raw) Cc: kai, monnier, storm, emacs-devel Richard Stallman wrote: Can you figure out which slot, in which stack frame, is currently being examined within mark_stack? That would probably lead us to the C level bug that directly causes these crashes. I am not familiar at all with how gc checks for memory corruption. Here is just a try. I use the latest crash I got, after Andreas' bugfix. #0 abort () at emacs.c:434 #1 0x0812a575 in mark_object (arg=142231922) at alloc.c:5034 #2 0x0812a5d6 in mark_object (arg=142409733) at alloc.c:5051 #3 0x0812948a in mark_memory (start=0xbffe91d0, end=0xbffff57c) at alloc.c:3781 #4 0x081294f5 in mark_stack () at alloc.c:4055 #5 0x08129aba in Fgarbage_collect () at alloc.c:4429 The abort at alloc.c, line 5034 is the default clause of a switch form. The abort occurs if XMISCTYPE (obj) is none of the listed possibilities. (gdb) up 1 #1 0x0812a575 in mark_object (arg=142231922) at alloc.c:5034 5034 abort (); (gdb) p obj $3 = 142231922 (gdb) p *obj $4 = 1230503937 (gdb) xtype Lisp_Symbol (gdb) xsymbol $5 = (struct Lisp_Symbol *) 0x49580000 Argument to arithmetic operation not a number or boolean. (gdb) p *$5 $6 = { gcmarkbit = 0, indirect_variable = 0, constant = 0, interned = 0, xname = 0, value = 0, function = 0, plist = 0, next = 0x0 } So unless I am confused, this is what the obj that causes the abort points to. Some further info, for whatever it is worth: (gdb) frame 1 #1 0x0812a575 in mark_object (arg=142231922) at alloc.c:5034 5034 abort (); (gdb) p obj $12 = 142231922 (gdb) xtype Lisp_Misc Lisp_Misc_Free (gdb) xmiscfree $13 = (struct Lisp_Free *) 0x87a4970 I do not know whether I am doing the right things here. I am not used to debugging bugs in gc. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 20:44 ` Luc Teirlinck @ 2004-05-15 23:44 ` Luc Teirlinck 2004-05-16 0:41 ` Luc Teirlinck 2004-05-17 11:04 ` Richard Stallman 2004-05-16 5:58 ` Eli Zaretskii 1 sibling, 2 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 23:44 UTC (permalink / raw) Cc: kai, emacs-devel, rms, storm, monnier Maybe some additions to my previous answer. Reminder: (gdb) bt #0 abort () at emacs.c:434 #1 0x0812a575 in mark_object (arg=142231922) at alloc.c:5034 #2 0x0812a5d6 in mark_object (arg=142409733) at alloc.c:5051 #3 0x0812948a in mark_memory (start=0xbffe91d0, end=0xbffff57c) at alloc.c:3781 #4 0x081294f5 in mark_stack () at alloc.c:4055 #5 0x08129aba in Fgarbage_collect () at alloc.c:4429 (gdb) frame 5 #5 0x08129aba in Fgarbage_collect () at alloc.c:4429 4429 mark_stack (); (gdb) p (char *) stack_base + i $41 = 0xbffff9e2 "AME=Default" (gdb) p (char *) stack_base + i - 15 $42 = 0xbffff9d3 "GNOME_SESSION_NAME=Default" (gdb) This is one of my environment variables. >From this, through all kinds of stuff I do not understand we arrive three frames down at: gdb) frame 2 #2 0x0812a5d6 in mark_object (arg=142409733) at alloc.c:5051 5051 mark_object (ptr->car); (gdb) p ptr $83 = (struct Lisp_Cons *) 0x87d0000 (gdb) p *ptr $84 = { car = 142231922, cdr = -16 } (gdb) p ptr->car $85 = 142231922 (gdb) p *$85 $86 = 1230503937 (gdb) xtype Lisp_Symbol (gdb) xsymbol $87 = (struct Lisp_Symbol *) 0x49580000 Argument to arithmetic operation not a number or boolean. (gdb) p *$87 $88 = { gcmarkbit = 0, indirect_variable = 0, constant = 0, interned = 0, xname = 0, value = 0, function = 0, plist = 0, next = 0x0 } (gdb) p ptr->cdr $89 = -16 (gdb) xtype Lisp_Int (gdb) xint $90 = -2 (gdb) The ptr->car then seems to produce the abort in frame 1, as I pointed out in my previous message. But then again, maybe nothing I am trying to do makes any sense. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 23:44 ` Luc Teirlinck @ 2004-05-16 0:41 ` Luc Teirlinck 2004-05-16 13:52 ` Andreas Schwab 2004-05-17 11:04 ` Richard Stallman 1 sibling, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-16 0:41 UTC (permalink / raw) Cc: kai, monnier, rms, storm, emacs-devel >From my previous message: (gdb) p (char *) stack_base + i $41 = 0xbffff9e2 "AME=Default" I get gc aborting on that _exact_ same string, starting with the exact same `A' in _every single one_ of my many crashes. (gdb) p (char *) stack_base + i - 15 $42 = 0xbffff9d3 "GNOME_SESSION_NAME=Default" (gdb) This is one of my environment variables. How can this make sense? I hope nothing in Emacs makes assumptions about some maximum size of environment variables (or whatever). I am using GNU/Linux. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 0:41 ` Luc Teirlinck @ 2004-05-16 13:52 ` Andreas Schwab 0 siblings, 0 replies; 95+ messages in thread From: Andreas Schwab @ 2004-05-16 13:52 UTC (permalink / raw) Cc: kai, emacs-devel, monnier, storm, rms Luc Teirlinck <teirllm@dms.auburn.edu> writes: >>From my previous message: > > (gdb) p (char *) stack_base + i > $41 = 0xbffff9e2 "AME=Default" > > I get gc aborting on that _exact_ same string, starting with the exact > same `A' in _every single one_ of my many crashes. That does not say anything, it's just the highest stack address the garbage collector looks at. It doesn't have to be exact, just above the highest address that could contain live Lisp pointers, which appears to be the case here. Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 23:44 ` Luc Teirlinck 2004-05-16 0:41 ` Luc Teirlinck @ 2004-05-17 11:04 ` Richard Stallman 2004-05-17 14:20 ` Luc Teirlinck 1 sibling, 1 reply; 95+ messages in thread From: Richard Stallman @ 2004-05-17 11:04 UTC (permalink / raw) Cc: emacs-devel, kai, teirllm, monnier, storm (gdb) frame 5 #5 0x08129aba in Fgarbage_collect () at alloc.c:4429 4429 mark_stack (); (gdb) p (char *) stack_base + i $41 = 0xbffff9e2 "AME=Default" (gdb) p (char *) stack_base + i - 15 $42 = 0xbffff9d3 "GNOME_SESSION_NAME=Default" (gdb) What is the value of i? What is stack_base? Anywya, they indicate where the stack begins. That doesn't tell us where the problem is. Please also look in the mark_memory frame and see what address it is actually operating on. That address should be part of some stack frame. Which stack frame is it? You may need to type `info frame 1', `info frame 2', and so on in order to see the addresses of various stack frames and find out which one contains the address in question. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-17 11:04 ` Richard Stallman @ 2004-05-17 14:20 ` Luc Teirlinck 0 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-17 14:20 UTC (permalink / raw) Cc: kai, emacs-devel, monnier, storm None of my crashes will still occur after Kim's recent change, because they all were caused by Lisp_Misc_Free objects. The garbage collector will ignore these now. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 20:44 ` Luc Teirlinck 2004-05-15 23:44 ` Luc Teirlinck @ 2004-05-16 5:58 ` Eli Zaretskii 2004-05-16 18:11 ` Luc Teirlinck 1 sibling, 1 reply; 95+ messages in thread From: Eli Zaretskii @ 2004-05-16 5:58 UTC (permalink / raw) Cc: emacs-devel > Date: Sat, 15 May 2004 15:44:44 -0500 (CDT) > From: Luc Teirlinck <teirllm@dms.auburn.edu> > > I am not familiar at all with how gc checks for memory corruption. Did you look in etc/DEBUG? It has a section about debugging crashes in GC. You need to use the last_marked[] array to guide you through the recursive invocations of mark_object and its ilk, and find out which part of what Lisp data structure is being marked when the disaster strikes. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 5:58 ` Eli Zaretskii @ 2004-05-16 18:11 ` Luc Teirlinck 2004-05-16 18:32 ` Luc Teirlinck ` (2 more replies) 0 siblings, 3 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-16 18:11 UTC (permalink / raw) Cc: emacs-devel Eli Zaretskii wrote: Did you look in etc/DEBUG? It has a section about debugging crashes in GC. You need to use the last_marked[] array to guide you through the recursive invocations of mark_object and its ilk, and find out which part of what Lisp data structure is being marked when the disaster strikes. I forgot to read that. However, I have trouble making sense of the contents of last_marked and I do not really understand the gc code. Using the very latest crash I produced, I get the _impression_ that gc is examining some structure related to the *tramp/ssh raven.dms.auburn.edu* buffer, but that is just a guess. (gdb) run -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Starting program: /home/teirllm/emacscvsdir/emacs/src/emacs-21.3.50.1 -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Breakpoint 1, abort () at emacs.c:434 434 kill (getpid (), SIGABRT); (gdb) bt #0 abort () at emacs.c:434 #1 0x0812a575 in mark_object (arg=145714794) at alloc.c:5034 #2 0x0812a5d6 in mark_object (arg=148693005) at alloc.c:5051 #3 0x0812948a in mark_memory (start=0xbffe91d0, end=0xbffff57c) at alloc.c:3781 #4 0x081294f5 in mark_stack () at alloc.c:4055 #5 0x08129aba in Fgarbage_collect () at alloc.c:4429 I omit the rest of the bt-output, since it is unrelated to gc. (gdb) p last_marked_index $197 = 18 (gdb) p last_marked[17] $198 = 145714794 (gdb) pr #<misc free cell> (gdb) p last_marked[16] $199 = 148693005 (gdb) pr (#<misc free cell> . -37) (gdb) p last_marked[15] $200 = 143097017 (gdb) pr (gdb) xtype Lisp_Symbol (gdb) xsymbol $201 = (struct Lisp_Symbol *) 0x8877cb8 Argument to arithmetic operation not a number or boolean. (gdb) p *$201 $202 = { gcmarkbit = 1, indirect_variable = 0, constant = 0, interned = 2, xname = 143098427, value = 138193545, function = 138193545, plist = 138193521, next = 0x86621b0 } (gdb) p $202->xname $203 = 143098427 (gdb) pr "" (gdb) xstring $204 = (struct Lisp_String *) 0x8878238 "cygwin-mount-map-drive-hook-function" (gdb) p last_marked[14] $205 = 148054205 (gdb) pr () (gdb) p last_marked[13] $206 = 143096993 (gdb) pr (gdb) xtype Lisp_Symbol (gdb) xsymbol $207 = (struct Lisp_Symbol *) 0x8877ca0 Argument to arithmetic operation not a number or boolean. (gdb) p *$207 $208 = { gcmarkbit = 1, indirect_variable = 0, constant = 0, interned = 2, xname = 143098411, value = 138193545, function = 138193545, plist = 138193521, next = 0x8636688 } (gdb) p $208->xname $209 = 143098411 (gdb) pr "" (gdb) xstring $210 = (struct Lisp_String *) 0x8878228 "cygwin-mount-name-hook-function" (gdb) p last_marked[12] $211 = 148054197 (gdb) pr ( ) (gdb) p last_marked[11] $212 = 138971849 (gdb) pr tramp-completion-file-name-handler (gdb) p last_marked[10] $213 = 148054029 (gdb) pr (tramp-completion-file-name-handler ) (gdb) p last_marked[9] $214 = 145715130 (gdb) pr #<marker at 185421 in *tramp/ssh raven.dms.auburn.edu*> (gdb) p last_marked[8] $215 = 920 (gdb) pr 115 (gdb) p last_marked[7] $216 = 148538453 (gdb) pr (115) (gdb) p last_marked[6] $217 = 936 (gdb) pr 117 (gdb) p last_marked[5] $218 = 148538277 (gdb) pr (117) (gdb) p last_marked[4] $219 = 880 (gdb) pr 110 (gdb) p last_marked[3] $220 = 148538285 (gdb) pr (110 117) (gdb) p last_marked[2] $221 = 920 (gdb) pr 115 (gdb) p last_marked[1] $222 = 148538293 (gdb) pr (115 110 117) (gdb) p last_marked[0] $223 = 840 (gdb) pr 105 ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 18:11 ` Luc Teirlinck @ 2004-05-16 18:32 ` Luc Teirlinck 2004-05-16 20:04 ` Luc Teirlinck 2004-05-17 6:04 ` Eli Zaretskii 2 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-16 18:32 UTC (permalink / raw) Cc: emacs-devel >From my previous message: (gdb) p $202->xname $203 = 143098427 (gdb) pr "" (gdb) xstring $204 = (struct Lisp_String *) 0x8878238 "cygwin-mount-map-drive-hook-function" Is this normal or bug? I know that pr sometimes is going to give _no_ answer and then you have to do the "xtype" stuff, but a wrong answer? Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 18:11 ` Luc Teirlinck 2004-05-16 18:32 ` Luc Teirlinck @ 2004-05-16 20:04 ` Luc Teirlinck 2004-05-16 22:41 ` Kim F. Storm 2004-05-17 6:04 ` Eli Zaretskii 2 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-16 20:04 UTC (permalink / raw) Cc: emacs-devel For whatever it is worth, the entries 10, 11, 13 and 15 in last_marked, close before the abort caused by 17, refer to tramp-completion-file-name-handler, "cygwin-mount-name-hook-function" and "cygwin-mount-map-drive-hook-function". During the execution of `tramp-run-real-handler' or `tramp-completion-run-real-handler', these three functions are elements of the list to which `inhibit-file-name-handlers' is bound with a let-binding. I do not know whether this is meaningful, but it is a bizarre coincidence if not. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 20:04 ` Luc Teirlinck @ 2004-05-16 22:41 ` Kim F. Storm 2004-05-17 5:21 ` Kai Grossjohann 2004-05-17 12:45 ` Kim F. Storm 0 siblings, 2 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-16 22:41 UTC (permalink / raw) Cc: emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > For whatever it is worth, the entries 10, 11, 13 and 15 in > last_marked, close before the abort caused by 17, refer to > tramp-completion-file-name-handler, "cygwin-mount-name-hook-function" > and "cygwin-mount-map-drive-hook-function". During the execution of > `tramp-run-real-handler' or `tramp-completion-run-real-handler', these > three functions are elements of the list to which > `inhibit-file-name-handlers' is bound with a let-binding. I do not > know whether this is meaningful, but it is a bizarre coincidence if not. I also made emacs crash with tramp + global-auto-revert-mode. I haven't had time to dig much into this, but it traps in the same way as you have observed -- the offending object seems to result from the scan for lisp-object pointers on the stack. One thing I noticed is that tramps seems to enable undo in its work buffers -- if that's really true, it looks like a bug to me... -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 22:41 ` Kim F. Storm @ 2004-05-17 5:21 ` Kai Grossjohann 2004-05-17 12:45 ` Kim F. Storm 1 sibling, 0 replies; 95+ messages in thread From: Kai Grossjohann @ 2004-05-17 5:21 UTC (permalink / raw) storm@cua.dk (Kim F. Storm) writes: > One thing I noticed is that tramps seems to enable undo in its > work buffers -- if that's really true, it looks like a bug to me... Yes. I forgot to turn it off. Perhaps it was needed for debugging ages ago. Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 22:41 ` Kim F. Storm 2004-05-17 5:21 ` Kai Grossjohann @ 2004-05-17 12:45 ` Kim F. Storm 2004-05-17 15:03 ` Luc Teirlinck 2004-05-18 16:25 ` Stefan Monnier 1 sibling, 2 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-17 12:45 UTC (permalink / raw) Cc: emacs-devel storm@cua.dk (Kim F. Storm) writes: > I also made emacs crash with tramp + global-auto-revert-mode. > And I have studied the cause a little further and found at least one reason for the crash -- trying to mark a Lisp_Misc_Free object, most likely resulting from freeing a marker which is still present on some undo list. I have installed a fix for this; I don't know if it has any bad effects, but at least it solves the crash for me. Now, tramp is hanging in accept-process-output when I try to open a remote file, but it can be interrupted with C-g. Solving that problem is a different issue ... -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-17 12:45 ` Kim F. Storm @ 2004-05-17 15:03 ` Luc Teirlinck 2004-05-17 15:22 ` Kim F. Storm 2004-05-18 16:25 ` Stefan Monnier 1 sibling, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-17 15:03 UTC (permalink / raw) Cc: emacs-devel Kim Storm wrote: And I have studied the cause a little further and found at least one reason for the crash -- trying to mark a Lisp_Misc_Free object, most likely resulting from freeing a marker which is still present on some undo list. Unless I am misunderstanding, it would seem that freeing a marker which is still referenced on an undo list is a bug. Is disabling undo in Tramp work buffers sufficient to avoid this kind of problem or is there still a bug in the C code? I have installed a fix for this; I don't know if it has any bad effects, but at least it solves the crash for me. Clearly any bad effects will only occur in situations were Emacs would have crashed earlier without your fix. An obvious bad effect is the one you mentioned yourself in the comment to your fix: unpredictable behavior if the user does `undo'. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-17 15:03 ` Luc Teirlinck @ 2004-05-17 15:22 ` Kim F. Storm 0 siblings, 0 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-17 15:22 UTC (permalink / raw) Cc: emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > Kim Storm wrote: > > And I have studied the cause a little further and found at least one > reason for the crash -- trying to mark a Lisp_Misc_Free object, most > likely resulting from freeing a marker which is still present on > some undo list. > > Unless I am misunderstanding, it would seem that freeing a marker > which is still referenced on an undo list is a bug. Is disabling undo > in Tramp work buffers sufficient to avoid this kind of problem or is > there still a bug in the C code? In any case, the problem seems to be aggrevated by tramp as it has a marker which was put on the undo-list MANY MANY times ... But I guess it could happen with any code involving markers (which may explain some of the less frequent crashes in mark_object.) > > I have installed a fix for this; I don't know if it has any > bad effects, but at least it solves the crash for me. > > Clearly any bad effects will only occur in situations were Emacs would > have crashed earlier without your fix. An obvious bad effect is the > one you mentioned yourself in the comment to your fix: unpredictable > behavior if the user does `undo'. If the marker isn't reused, it boils down to checking that undo on a Lisp_Misc_Free object is a noop. My latest fix didn't mark the Lisp_Misc_Free cell as used -- I just committed another change to do that. It seems that primitive-undo just ignores a Lisp_Misc_Free object, so there doesn't seem to be a reason to worry about undefined behaviour. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-17 12:45 ` Kim F. Storm 2004-05-17 15:03 ` Luc Teirlinck @ 2004-05-18 16:25 ` Stefan Monnier 2004-05-18 17:10 ` Luc Teirlinck 1 sibling, 1 reply; 95+ messages in thread From: Stefan Monnier @ 2004-05-18 16:25 UTC (permalink / raw) Cc: Luc Teirlinck, emacs-devel >> I also made emacs crash with tramp + global-auto-revert-mode. > And I have studied the cause a little further and found at least one > reason for the crash -- trying to mark a Lisp_Misc_Free object, most > likely resulting from freeing a marker which is still present on > some undo list. > I have installed a fix for this; I don't know if it has any > bad effects, but at least it solves the crash for me. Well, it makes it "legal" to have a live Lisp_Misc_free object, which is at least odd and might lead to further problems. But more importantly, Fgarbage_collect has code that traverses the undo lists and removes entries that contain unmarked markers, which should make sure the problem you describe doesn't happen. Obviously that code is not 100% successful at it, but rather than hide the problem we might want to track it down further to see what's really going on. Looking at the code, I see one case where things could go awry: 1) mark buffer -> mark the undo_list, skipping markers 2) coming from somewhere else, mark a cons cell who happens to also be on the undo_list we marked in step 1 and whose car is a marker: because the cons cells were already marked, we won't look at the marker. Also the code in Fgarbage_collect will remove the cons cell from the undo_list but that will not remove it from the other list, so it will stay and be turned into a reachable Lisp_Misc_Free. Another thing I notice is that we do mark_stack and xg_mark_data after cleaning up the undo_lists, so if any undo_list gets marked from mark_stack or xg_mark_data we will leave the unmarked markers and turn them info Lisp_Misc_Free. I've just installed a fix for this last problem (although it's not a very likely scenario so I don't expect it fixes the problem we're seeing). I don't have a fix for the first yet problem yet (which is also somewhat unlikely, but less so, so maybe it is the problem we're seeing). Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-18 16:25 ` Stefan Monnier @ 2004-05-18 17:10 ` Luc Teirlinck 2004-05-21 23:44 ` Kim F. Storm 0 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-18 17:10 UTC (permalink / raw) Cc: emacs-devel, storm Stefan Monnier wrote: I've just installed a fix for this last problem (although it's not a very likely scenario so I don't expect it fixes the problem we're seeing). It does not. I still get the same data type corruption crashes. This time I had a hard time producing one however (which does not necessarily mean anything). Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-18 17:10 ` Luc Teirlinck @ 2004-05-21 23:44 ` Kim F. Storm 2004-05-22 1:08 ` Luc Teirlinck 0 siblings, 1 reply; 95+ messages in thread From: Kim F. Storm @ 2004-05-21 23:44 UTC (permalink / raw) Cc: monnier, emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > Stefan Monnier wrote: > > I've just installed a fix for this last problem (although > it's not a very likely scenario so I don't expect it fixes the problem > we're seeing). > > It does not. I still get the same data type corruption crashes. > This time I had a hard time producing one however (which does not > necessarily mean anything). Please try again with my latest changes to GC. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-21 23:44 ` Kim F. Storm @ 2004-05-22 1:08 ` Luc Teirlinck 2004-05-22 11:52 ` Kim F. Storm 0 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-22 1:08 UTC (permalink / raw) Cc: monnier, emacs-devel Kim Storm wrote: Please try again with my latest changes to GC. This time I indeed do not seem able to produce this type of crash anymore. Tramp is still unusable with auto-revert-mode and I see a variety of strange bugs when trying to visit a second remote file using Tramp, for instance a copy of the modeline temporarily appearing inside the minibuffer. I suspect that all these bugs are related to recursive Tramp invocations, which should be avoided. I guess we have up till now avoided actually doing something about these problems, not to interfere with the gc debugging. Should everybody agree that the problems with gc are fixed, then we could make the necessary changes in autorevert.el and tramp.el to get rid of the recursive invocation bugs. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-22 1:08 ` Luc Teirlinck @ 2004-05-22 11:52 ` Kim F. Storm 2004-05-23 17:21 ` Michael Albinus 0 siblings, 1 reply; 95+ messages in thread From: Kim F. Storm @ 2004-05-22 11:52 UTC (permalink / raw) Cc: monnier, emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > Kim Storm wrote: > > Please try again with my latest changes to GC. > > This time I indeed do not seem able to produce this type of crash anymore. > > Tramp is still unusable with auto-revert-mode and I see a variety of > strange bugs when trying to visit a second remote file using Tramp, > for instance a copy of the modeline temporarily appearing inside the > minibuffer. I suspect that all these bugs are related to recursive > Tramp invocations, which should be avoided. I guess we have up till > now avoided actually doing something about these problems, not to > interfere with the gc debugging. > > Should everybody agree that the problems with gc are fixed, then we > could make the necessary changes in autorevert.el and tramp.el to get > rid of the recursive invocation bugs. I have experienced various problems with tramp itself while debugging the GC problems -- they certainly need to be fixed before release. I have a good confidence that my latest fixes to GC do fix the reported problems with bad Misc object types. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-22 11:52 ` Kim F. Storm @ 2004-05-23 17:21 ` Michael Albinus 0 siblings, 0 replies; 95+ messages in thread From: Michael Albinus @ 2004-05-23 17:21 UTC (permalink / raw) Cc: emacs-devel storm@cua.dk (Kim F. Storm) writes: > I have experienced various problems with tramp itself while debugging > the GC problems -- they certainly need to be fixed before release. Could you, please, be a little bit more verbose? I guess you mean something else but the autorevert problem. Best regards, Michael. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 18:11 ` Luc Teirlinck 2004-05-16 18:32 ` Luc Teirlinck 2004-05-16 20:04 ` Luc Teirlinck @ 2004-05-17 6:04 ` Eli Zaretskii 2 siblings, 0 replies; 95+ messages in thread From: Eli Zaretskii @ 2004-05-17 6:04 UTC (permalink / raw) Cc: emacs-devel > Date: Sun, 16 May 2004 13:11:03 -0500 (CDT) > From: Luc Teirlinck <teirllm@dms.auburn.edu> > > I have trouble making sense of the contents of last_marked You need to look backwards in last_marked starting with last_marked_index, like you did, but to look at the GC code as you go. The part of GC where your session crashed examines live Lisp objects and marks all of the components of each object (so that the following sweep step will not garbage-collect what is still in use). Some Lisp data structures are marked by looping inside the same invocation of mark_object; others cause mark_object to be invoked recursively. By contrast, the objects in last_marked[] array are recorded chronologically as they are marked, and the recursive invocations are not visible there. So, to find out which Lisp data structure was being marked, you need to identify what object in last_marked[] corresponds to each recursive invocation of mark_object that you see in the backtrace. That would hopefully give a hint as to where to look for the villain(s). Does that help? ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 23:00 ` Kim F. Storm 2004-05-15 0:44 ` Luc Teirlinck 2004-05-15 1:39 ` Luc Teirlinck @ 2004-05-15 2:50 ` Luc Teirlinck 2004-05-15 13:19 ` Andreas Schwab 2004-05-15 3:23 ` Luc Teirlinck 2004-05-15 18:02 ` Luc Teirlinck 4 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 2:50 UTC (permalink / raw) Cc: kai, monnier, emacs-devel This time I have again trouble reading an argument and maybe this time that is not just due to my failure to read etc/DEBUG carefully enough. We get at: #7 (match-string 6 "/ssh:raven.dms.auburn.edu:/home/teirllm/") #10 #[(name) "" [] 8 ("" . 211858)] #13 #[(filename) "" [] 6 ("" . 2640)] #16 #[(filename) "" [] 3 ("" . 119402)] #19 (tramp-file-name-handler expand-file-name "" "/ssh:raven.dms.auburn.edu:/home/teirllm/") #23 (file-readable-p ??? (gdb) up 4 #23 0x0813ca53 in Ffuncall (nargs=2, args=0xbfffcf20) at eval.c:2726 2726 val = (*XSUBR (fun)->function) (internal_args[0]); (gdb) p *args $33 = 138327097 (gdb) pr file-readable-p (gdb) p args[1] $40 = 144357203 (gdb) xtype Lisp_String (gdb) xstring $41 = (struct Lisp_String *) 0x89ab750 Invalid number -2147483598 of repetitions. Could this be relevant to the bug in xbacktrace? Remember: (gdb) xbacktrace Invalid number -2147483625 of repetitions. After that, I absent-mindedly produced a SIGSEGV again. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 2:50 ` Luc Teirlinck @ 2004-05-15 13:19 ` Andreas Schwab 2004-05-15 13:34 ` Luc Teirlinck 2004-05-15 13:51 ` Luc Teirlinck 0 siblings, 2 replies; 95+ messages in thread From: Andreas Schwab @ 2004-05-15 13:19 UTC (permalink / raw) Cc: kai, emacs-devel, monnier, storm Luc Teirlinck <teirllm@dms.auburn.edu> writes: > (gdb) xstring > $41 = (struct Lisp_String *) 0x89ab750 > Invalid number -2147483598 of repetitions. What are the contents of the pointer? Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 13:19 ` Andreas Schwab @ 2004-05-15 13:34 ` Luc Teirlinck 2004-05-15 16:45 ` Andreas Schwab 2004-05-15 13:51 ` Luc Teirlinck 1 sibling, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 13:34 UTC (permalink / raw) Cc: kai, monnier, storm, emacs-devel Andreas Schwab wrote: Luc Teirlinck <teirllm@dms.auburn.edu> writes: > (gdb) xstring > $41 = (struct Lisp_String *) 0x89ab750 > Invalid number -2147483598 of repetitions. What are the contents of the pointer? I should have thought of that: (gdb) p *$41 $75 = { size = -2147483598, size_byte = -1, intervals = 0x0, data = 0x89a8984 "/usr/local/share/emacs/21.3.50/lisp/mh-e/down.jpeg" } Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 13:34 ` Luc Teirlinck @ 2004-05-15 16:45 ` Andreas Schwab 2004-05-15 17:49 ` Luc Teirlinck 0 siblings, 1 reply; 95+ messages in thread From: Andreas Schwab @ 2004-05-15 16:45 UTC (permalink / raw) Cc: kai, monnier, storm, emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > (gdb) p *$41 > $75 = { > size = -2147483598, > size_byte = -1, > intervals = 0x0, > data = 0x89a8984 > "/usr/local/share/emacs/21.3.50/lisp/mh-e/down.jpeg" > } -2147483598 is 50 | ARRAY_MARK_FLAG. I have fixed the gdb makros to mask off ARRAY_MARK_FLAG from vector sizes. Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 16:45 ` Andreas Schwab @ 2004-05-15 17:49 ` Luc Teirlinck 0 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 17:49 UTC (permalink / raw) Cc: kai, emacs-devel, monnier, storm Andreas Schwab wrote: -2147483598 is 50 | ARRAY_MARK_FLAG. I have fixed the gdb makros to mask off ARRAY_MARK_FLAG from vector sizes. Wonderful. Now xbacktrace works again. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 13:19 ` Andreas Schwab 2004-05-15 13:34 ` Luc Teirlinck @ 2004-05-15 13:51 ` Luc Teirlinck 2004-05-15 18:26 ` Eli Zaretskii 1 sibling, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 13:51 UTC (permalink / raw) Cc: kai, monnier, storm, emacs-devel I do not have a file "/usr/local/share/emacs/21.3.50/lisp/mh-e/down.jpeg" by the way. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 13:51 ` Luc Teirlinck @ 2004-05-15 18:26 ` Eli Zaretskii 0 siblings, 0 replies; 95+ messages in thread From: Eli Zaretskii @ 2004-05-15 18:26 UTC (permalink / raw) Cc: emacs-devel > Date: Sat, 15 May 2004 08:51:28 -0500 (CDT) > From: Luc Teirlinck <teirllm@dms.auburn.edu> > > I do not have a file "/usr/local/share/emacs/21.3.50/lisp/mh-e/down.jpeg" > by the way. That doesn't necessarily tell anything of value: Emacs could, for example, cons such a string while looking for a `down' icon, whereby it tries several extensions that indicate image files. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 23:00 ` Kim F. Storm ` (2 preceding siblings ...) 2004-05-15 2:50 ` Luc Teirlinck @ 2004-05-15 3:23 ` Luc Teirlinck 2004-05-15 18:02 ` Luc Teirlinck 4 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 3:23 UTC (permalink / raw) Cc: kai, monnier, emacs-devel This time I was able to load ten large remote files and do M-x customize-group. I only got the crash when, after ages, I did M-x customize-browse and clicked on "Editing". Immediate crash. Looks like an easier backtrace. At least _some_ part of xbacktrace is still functional, apparently. I might wait till tomorrow to try to translate the bt into Lisp. Right now I would probably manage to segfault it again. ===File ~/latestbt========================================== (gdb) xbacktrace "require" "custom-load-symbol" Invalid number -2147483630 of repetitions. (gdb) bt #0 abort () at emacs.c:433 #1 0x0812a575 in mark_object (arg=144569074) at alloc.c:5034 #2 0x0812a5d6 in mark_object (arg=145360869) at alloc.c:5051 #3 0x0812a5d6 in mark_object (arg=145358853) at alloc.c:5051 #4 0x0812948a in mark_memory (start=0xbfffd790, end=0xbffff57c) at alloc.c:3781 #5 0x081294f5 in mark_stack () at alloc.c:4055 #6 0x08129aba in Fgarbage_collect () at alloc.c:4429 #7 0x0813bdb9 in Feval (form=145267357) at eval.c:1977 #8 0x0814fb75 in readevalloop (readcharfun=138273097, stream=0x88b0090, sourcename=136026155, evalfun=0x813bd28 <Feval>, printflag=0, unibyte=138193489, readfun=138193489) at lread.c:1376 #9 0x0814eec5 in Fload (file=136026155, noerror=138193489, nomessage=138193537, nosuffix=138193489, must_suffix=17274192) at lread.c:914 #10 0x08145de9 in Frequire (feature=138502713, filename=138193489, noerror=138193489) at fns.c:3417 #11 0x0813c09a in Feval (form=136045605) at eval.c:2084 #12 0x0813aec5 in Fcondition_case (args=144832669) at eval.c:1280 #13 0x0816614e in Fbyte_code (bytestr=136045163, vector=136045316, maxdepth=40) at bytecode.c:870 #14 0x0813cf6f in funcall_lambda (fun=136045124, nargs=1, arg_vector=0xbfffdea4) at eval.c:2913 #15 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffdea0) at eval.c:2783 #16 0x08165c50 in Fbyte_code (bytestr=143329475, vector=143121692, maxdepth=24) at bytecode.c:689 #17 0x0813cf6f in funcall_lambda (fun=143558988, nargs=1, arg_vector=0xbfffdfc4) at eval.c:2913 #18 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffdfc0) at eval.c:2783 #19 0x08165c50 in Fbyte_code (bytestr=143398043, vector=143312572, maxdepth=144) at bytecode.c:689 #20 0x0813cf6f in funcall_lambda (fun=143732732, nargs=1, arg_vector=0xbfffe1a4) at eval.c:2913 #21 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffe1a0) at eval.c:2783 #22 0x0813c2ba in Fapply (nargs=3, args=0xbfffe1a0) at eval.c:2175 #23 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffe234) at fns.c:3519 #24 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffe230) at eval.c:2707 #25 0x08165c50 in Fbyte_code (bytestr=143419323, vector=144229652, maxdepth=72) at bytecode.c:689 #26 0x0813cf6f in funcall_lambda (fun=143773748, nargs=1, arg_vector=0xbfffe3f4) at eval.c:2913 #27 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffe3f0) at eval.c:2783 #28 0x0813c2ba in Fapply (nargs=3, args=0xbfffe3f0) at eval.c:2175 #29 0x0814609f in Fwidget_apply (nargs=2, args=0xbfffe484) at fns.c:3519 #30 0x0813c9c6 in Ffuncall (nargs=3, args=0xbfffe480) at eval.c:2707 #31 0x08165c50 in Fbyte_code (bytestr=143419307, vector=144229612, maxdepth=32) at bytecode.c:689 #32 0x0813cf6f in funcall_lambda (fun=143766900, nargs=9, arg_vector=0xbfffe5a4) at eval.c:2913 #33 0x0813cb45 in Ffuncall (nargs=10, args=0xbfffe5a0) at eval.c:2783 #34 0x08165c50 in Fbyte_code (bytestr=143347427, vector=143757276, maxdepth=80) at bytecode.c:689 #35 0x0813cf6f in funcall_lambda (fun=143756860, nargs=1, arg_vector=0xbfffe704) at eval.c:2913 #36 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffe700) at eval.c:2783 #37 0x0813c79a in call1 (fn=143756860, arg1=143568245) at eval.c:2520 #38 0x08145264 in mapcar1 (leni=1, vals=0xbfffe780, fn=143756860, seq=143568253) at fns.c:2962 #39 0x08145347 in Fmapcar (function=143756860, sequence=143568253) at fns.c:3022 #40 0x0813ca66 in Ffuncall (nargs=3, args=0xbfffe820) at eval.c:2729 #41 0x08165c50 in Fbyte_code (bytestr=140741795, vector=143776468, maxdepth=80) at bytecode.c:689 ---Type <return> to continue, or q <return> to quit--- #42 0x0813cf6f in funcall_lambda (fun=143755740, nargs=2, arg_vector=0xbfffe964) at eval.c:2913 #43 0x0813cb45 in Ffuncall (nargs=3, args=0xbfffe960) at eval.c:2783 #44 0x08165c50 in Fbyte_code (bytestr=140741971, vector=143753868, maxdepth=48) at bytecode.c:689 #45 0x0813cf6f in funcall_lambda (fun=143726996, nargs=3, arg_vector=0xbfffea94) at eval.c:2913 #46 0x0813cb45 in Ffuncall (nargs=4, args=0xbfffea90) at eval.c:2783 #47 0x08165c50 in Fbyte_code (bytestr=143592315, vector=143183804, maxdepth=48) at bytecode.c:689 #48 0x0813cf6f in funcall_lambda (fun=140707652, nargs=1, arg_vector=0xbfffebc4) at eval.c:2913 #49 0x0813cb45 in Ffuncall (nargs=2, args=0xbfffebc0) at eval.c:2783 #50 0x08165c50 in Fbyte_code (bytestr=143579563, vector=143754380, maxdepth=24) at bytecode.c:689 #51 0x0813cf6f in funcall_lambda (fun=143752596, nargs=2, arg_vector=0xbfffed64) at eval.c:2913 #52 0x0813cb45 in Ffuncall (nargs=3, args=0xbfffed60) at eval.c:2783 #53 0x0813c2de in Fapply (nargs=3, args=0xbfffed60) at eval.c:2179 #54 0x0814609f in Fwidget_apply (nargs=3, args=0xbfffedf4) at fns.c:3519 #55 0x0813c9c6 in Ffuncall (nargs=4, args=0xbfffedf0) at eval.c:2707 #56 0x08165c50 in Fbyte_code (bytestr=144629011, vector=144225468, maxdepth=32) at bytecode.c:689 #57 0x0813cf6f in funcall_lambda (fun=143558636, nargs=2, arg_vector=0xbfffef14) at eval.c:2913 #58 0x0813cb45 in Ffuncall (nargs=3, args=0xbfffef10) at eval.c:2783 #59 0x08165c50 in Fbyte_code (bytestr=144629027, vector=144404340, maxdepth=32) at bytecode.c:689 #60 0x0813cf6f in funcall_lambda (fun=143522236, nargs=1, arg_vector=0xbffff064) at eval.c:2913 #61 0x0813cb45 in Ffuncall (nargs=2, args=0xbffff060) at eval.c:2783 #62 0x081394c9 in Fcall_interactively (function=138579001, record_flag=17274186, keys=138250348) at callint.c:862 #63 0x080ee5dd in Fcommand_execute (cmd=138579001, record_flag=138193489, keys=138193489, special=138193489) at keyboard.c:9670 #64 0x080e4963 in command_loop_1 () at keyboard.c:1727 #65 0x0813afb6 in internal_condition_case (bfun=0x80e3a90 <command_loop_1>, handlers=138254417, hfun=0x80e3674 <cmd_error>) at eval.c:1333 #66 0x080e394e in command_loop_2 () at keyboard.c:1264 #67 0x0813ab27 in internal_catch (tag=138248441, func=0x80e3930 <command_loop_2>, arg=138193489) at eval.c:1094 #68 0x080e38dc in command_loop () at keyboard.c:1243 #69 0x080e345b in recursive_edit_1 () at keyboard.c:959 #70 0x080e356f in Frecursive_edit () at keyboard.c:1015 #71 0x080e24ab in main (argc=4, argv=0xbffff814) at emacs.c:1692 #72 0x40317627 in __libc_start_main (main=0x80e17d4 <main>, argc=4, ubp_av=0xbffff814, init=0x804e1b0 <_init>, fini=0x81845fc <_fini>, rtld_fini=0x4000dcd4 <_dl_fini>, stack_end=0xbffff80c) at ../sysdeps/generic/libc-start.c:129 (gdb) ============================================================ ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 23:00 ` Kim F. Storm ` (3 preceding siblings ...) 2004-05-15 3:23 ` Luc Teirlinck @ 2004-05-15 18:02 ` Luc Teirlinck 4 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-15 18:02 UTC (permalink / raw) Cc: kai, monnier, emacs-devel Since Andreas fixed xbacktrace, I can now include an xbackrace from a new crash. The crash occurred while loading a remote file using Tramp-ssh. Everything in the xbacktrace seems expected, given that. I actually manually looked at the Lisp functions in the crash I produced yesterday and there the results were more surprising. All involved functions were "innocent looking" custom and widget stuff, apparently no suspicious Tramp stuff in sight. Of course, if the crash would be due to memory corruption, then gc can detect it at any time. ===File ~/xbt=============================================== (gdb) run -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Starting program: /home/teirllm/emacscvsdir/emacs/src/emacs-21.3.50.1 -q --eval '(progn (blink-cursor-mode 0) (global-auto-revert-mode 1))' Breakpoint 1, abort () at emacs.c:434 434 kill (getpid (), SIGABRT); (gdb) xbacktrace "tramp-wait-for-output" "tramp-send-command-and-check" "tramp-barf-unless-okay" "tramp-handle-file-local-copy" "apply" "tramp-sh-file-name-handler" "apply" "tramp-file-name-handler" "file-local-copy" "tramp-handle-insert-file-contents" "apply" "tramp-sh-file-name-handler" "apply" "tramp-file-name-handler" "insert-file-contents" "byte-code" "find-file-noselect-1" "find-file-noselect" "find-file" "call-interactively" (gdb) bt #0 abort () at emacs.c:434 #1 0x0812a575 in mark_object (arg=142231922) at alloc.c:5034 #2 0x0812a5d6 in mark_object (arg=142409733) at alloc.c:5051 #3 0x0812948a in mark_memory (start=0xbffe91d0, end=0xbffff57c) at alloc.c:3781 #4 0x081294f5 in mark_stack () at alloc.c:4055 #5 0x08129aba in Fgarbage_collect () at alloc.c:4429 #6 0x0813c887 in Ffuncall (nargs=2, args=0xbffe9360) at eval.c:2666 #7 0x08165c50 in Fbyte_code (bytestr=143174307, vector=143176292, maxdepth=64) at bytecode.c:689 #8 0x0813cf6f in funcall_lambda (fun=143176572, nargs=0, arg_vector=0xbffe9494) at eval.c:2913 #9 0x0813cb45 in Ffuncall (nargs=1, args=0xbffe9490) at eval.c:2783 #10 0x08165c50 in Fbyte_code (bytestr=143176667, vector=143177892, maxdepth=80) at bytecode.c:689 #11 0x0813cf6f in funcall_lambda (fun=143178092, nargs=6, arg_vector=0xbffe95d8) at eval.c:2913 #12 0x0813cb45 in Ffuncall (nargs=7, args=0xbffe95d4) at eval.c:2783 #13 0x08165c50 in Fbyte_code (bytestr=143176843, vector=143178156, maxdepth=64) at bytecode.c:689 #14 0x0813cf6f in funcall_lambda (fun=143178324, nargs=9, arg_vector=0xbffe9704) at eval.c:2913 #15 0x0813cb45 in Ffuncall (nargs=10, args=0xbffe9700) at eval.c:2783 #16 0x08165c50 in Fbyte_code (bytestr=143095763, vector=143098012, maxdepth=88) at bytecode.c:689 #17 0x0813cf6f in funcall_lambda (fun=140697732, nargs=1, arg_vector=0xbffe9908) at eval.c:2913 #18 0x0813cb45 in Ffuncall (nargs=2, args=0xbffe9904) at eval.c:2783 #19 0x0813c2de in Fapply (nargs=2, args=0xbffe9904) at eval.c:2179 #20 0x0813c9c6 in Ffuncall (nargs=3, args=0xbffe9900) at eval.c:2707 #21 0x08165c50 in Fbyte_code (bytestr=143099195, vector=140318948, maxdepth=32) at bytecode.c:689 #22 0x0813cf6f in funcall_lambda (fun=140318692, nargs=2, arg_vector=0xbffe9ae8) at eval.c:2913 #23 0x0813cb45 in Ffuncall (nargs=3, args=0xbffe9ae4) at eval.c:2783 #24 0x0813c2de in Fapply (nargs=3, args=0xbffe9ae4) at eval.c:2179 #25 0x0813c9c6 in Ffuncall (nargs=4, args=0xbffe9ae0) at eval.c:2707 #26 0x08165c50 in Fbyte_code (bytestr=143099163, vector=140369356, maxdepth=40) at bytecode.c:689 #27 0x0813cf6f in funcall_lambda (fun=140905228, nargs=2, arg_vector=0xbffe9c14) at eval.c:2913 #28 0x0813cb45 in Ffuncall (nargs=3, args=0xbffe9c10) at eval.c:2783 #29 0x08165c50 in Fbyte_code (bytestr=136139723, vector=136139756, maxdepth=32) at bytecode.c:689 #30 0x0813cf6f in funcall_lambda (fun=136139684, nargs=1, arg_vector=0xbffe9d34) at eval.c:2913 #31 0x0813cb45 in Ffuncall (nargs=2, args=0xbffe9d30) at eval.c:2783 #32 0x08165c50 in Fbyte_code (bytestr=143096195, vector=143098364, maxdepth=72) at bytecode.c:689 #33 0x0813cf6f in funcall_lambda (fun=140805684, nargs=5, arg_vector=0xbffe9e74) at eval.c:2913 #34 0x0813cb45 in Ffuncall (nargs=6, args=0xbffe9e70) at eval.c:2783 #35 0x0813c3f8 in Fapply (nargs=2, args=0xbffe9f54) at eval.c:2231 #36 0x0813c9c6 in Ffuncall (nargs=3, args=0xbffe9f50) at eval.c:2707 #37 0x08165c50 in Fbyte_code (bytestr=143099195, vector=140318948, maxdepth=32) at bytecode.c:689 #38 0x0813cf6f in funcall_lambda (fun=140318692, nargs=6, arg_vector=0xbffea074) at eval.c:2913 #39 0x0813cb45 in Ffuncall (nargs=7, args=0xbffea070) at eval.c:2783 #40 0x0813c3f8 in Fapply (nargs=3, args=0xbffea154) at eval.c:2231 #41 0x0813c9c6 in Ffuncall (nargs=4, args=0xbffea150) at eval.c:2707 #42 0x08165c50 in Fbyte_code (bytestr=143099163, vector=140369356, maxdepth=40) at bytecode.c:689 ---Type <return> to continue, or q <return> to quit--- #43 0x0813cf6f in funcall_lambda (fun=140905228, nargs=6, arg_vector=0xbffea2a4) at eval.c:2913 #44 0x0813cb45 in Ffuncall (nargs=7, args=0xbffea2a0) at eval.c:2783 #45 0x0813c826 in call6 (fn=138971825, arg1=138327433, arg2=142420219, arg3=138193569, arg4=138193521, arg5=138193521, arg6=138193521) at eval.c:2640 #46 0x0810bdef in Finsert_file_contents (filename=142420219, visit=138193569, beg=138193521, end=138193521, replace=138193521) at fileio.c:3719 #47 0x0813cac9 in Ffuncall (nargs=3, args=0xbfffea00) at eval.c:2759 #48 0x08165c50 in Fbyte_code (bytestr=136153067, vector=136153108, maxdepth=24) at bytecode.c:689 #49 0x0813c09a in Feval (form=136153053) at eval.c:2084 #50 0x0813aec5 in Fcondition_case (args=148227829) at eval.c:1280 #51 0x0816614e in Fbyte_code (bytestr=136152451, vector=136152652, maxdepth=32) at bytecode.c:870 #52 0x0813cf6f in funcall_lambda (fun=136152380, nargs=6, arg_vector=0xbfffed84) at eval.c:2913 #53 0x0813cb45 in Ffuncall (nargs=7, args=0xbfffed80) at eval.c:2783 #54 0x08165c50 in Fbyte_code (bytestr=136149875, vector=136150548, maxdepth=64) at bytecode.c:689 #55 0x0813cf6f in funcall_lambda (fun=136149804, nargs=4, arg_vector=0xbfffeeb4) at eval.c:2913 #56 0x0813cb45 in Ffuncall (nargs=5, args=0xbfffeeb0) at eval.c:2783 #57 0x08165c50 in Fbyte_code (bytestr=136143891, vector=136143940, maxdepth=48) at bytecode.c:689 #58 0x0813cf6f in funcall_lambda (fun=136143836, nargs=2, arg_vector=0xbfffefe4) at eval.c:2913 #59 0x0813cb45 in Ffuncall (nargs=3, args=0xbfffefe0) at eval.c:2783 #60 0x0813c3f8 in Fapply (nargs=2, args=0xbffff070) at eval.c:2231 #61 0x0813c763 in apply1 (fn=138309881, arg=142376469) at eval.c:2487 #62 0x081385a5 in Fcall_interactively (function=138309881, record_flag=138193521, keys=138250380) at callint.c:406 #63 0x080ee5dd in Fcommand_execute (cmd=138309881, record_flag=138193521, keys=138193521, special=138193521) at keyboard.c:9670 #64 0x080e4963 in command_loop_1 () at keyboard.c:1727 #65 0x0813afb6 in internal_condition_case (bfun=0x80e3a90 <command_loop_1>, handlers=138254449, hfun=0x80e3674 <cmd_error>) at eval.c:1333 #66 0x080e394e in command_loop_2 () at keyboard.c:1264 #67 0x0813ab27 in internal_catch (tag=138248473, func=0x80e3930 <command_loop_2>, arg=138193521) at eval.c:1094 #68 0x080e38dc in command_loop () at keyboard.c:1243 #69 0x080e345b in recursive_edit_1 () at keyboard.c:959 #70 0x080e356f in Frecursive_edit () at keyboard.c:1015 #71 0x080e24ab in main (argc=4, argv=0xbffff814) at emacs.c:1693 #72 0x40317627 in __libc_start_main (main=0x80e17d4 <main>, argc=4, ubp_av=0xbffff814, init=0x804e1b0 <_init>, fini=0x81845fc <_fini>, rtld_fini=0x4000dcd4 <_dl_fini>, stack_end=0xbffff80c) at ../sysdeps/generic/libc-start.c:129 ============================================================ ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 1:32 ` Luc Teirlinck 2004-05-14 2:35 ` Stefan Monnier @ 2004-05-14 21:02 ` Richard Stallman 1 sibling, 0 replies; 95+ messages in thread From: Richard Stallman @ 2004-05-14 21:02 UTC (permalink / raw) Cc: kai, monnier, storm, emacs-devel Because it runs Tramp from a timer. Timers can be run whenever Emacs is waiting, i.e. it can happen when Tramp is waiting for the other end's prompt to come up. So is this sufficient of a problem to just disable auto-reverting of remote files completely? The problem I am experiencing now is definitely bad enough that it should be disabled by default. I think that calling Tramp from within a timer is in itself a bug. One way to prevent that is not to auto-revert remote files. That might the right thing. But it is not the only way to avoid this problem. The timer could send messages to a subprocess (such as the one that Tramp uses anyway), and when the answers come back, the process handler could take appropriate action. One would probably want a longer interval between rechecking of a remote file, not just a few seconds. A minute, or several minutes, is what I would think of. And while a recheck is in progress, it should know this and avoid starting another recheck of the same file. Just that last change might be enough to prevent this problem. Of course, we suspect there is a bug at the C level and we would like to fix that as well. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 1:17 ` Stefan Monnier 2004-05-14 1:32 ` Luc Teirlinck @ 2004-05-14 2:31 ` Luc Teirlinck 2004-05-14 5:32 ` Luc Teirlinck 2004-05-14 11:36 ` Kai Grossjohann 2 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 2:31 UTC (permalink / raw) Cc: kai, emacs-devel, storm I plan to commit the following shortly. The problems with auto-reverting remote files can occasionally become so bad as to make Emacs unusable. The crash is not the only problem. Maybe one could discuss setting the default back to t. But people with a slow connection definitely need a way to disable auto-reverting of remote files. So the option seems to be definitely needed. ===File ~/auto-revert-diff================================== *** autorevert.el 04 Apr 2004 19:50:59 -0500 1.29 --- autorevert.el 13 May 2004 20:45:22 -0500 *************** *** 185,190 **** --- 185,199 ---- :group 'auto-revert :type 'boolean) + (defcustom global-auto-revert-remote-files nil + "When non-nil, Global Auto-Revert Mode reverts remote files. + Setting this non-nil can be dangerous. If you have a slow + connection, or are not permanently on-line, freezes and other + problems can result." + :group 'auto-revert + :type 'boolean + :version "21.4") + (defcustom global-auto-revert-ignore-modes '() "List of major modes Global Auto-Revert Mode should not check." :group 'auto-revert *************** *** 311,316 **** --- 320,326 ---- (unless (buffer-modified-p) (let ((buffer (current-buffer)) revert eob eoblist) (or (and buffer-file-name + (or auto-revert-mode global-auto-revert-remote-files) (file-readable-p buffer-file-name) (not (verify-visited-file-modtime buffer)) (setq revert t)) ============================================================ ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 2:31 ` Luc Teirlinck @ 2004-05-14 5:32 ` Luc Teirlinck 0 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 5:32 UTC (permalink / raw) Cc: kai, monnier, storm, emacs-devel My proposed patch had an obvious bug. Here is a corrected version, although we will probably need additional or different changes. ===File ~/auto-revert-diff================================== *** autorevert.el 04 Apr 2004 19:50:59 -0500 1.29 --- autorevert.el 14 May 2004 00:12:18 -0500 *************** *** 185,190 **** --- 185,199 ---- :group 'auto-revert :type 'boolean) + (defcustom global-auto-revert-remote-files nil + "When non-nil, Global Auto-Revert Mode reverts remote files. + Setting this non-nil can be dangerous. If you have a slow + connection, or are not permanently on-line, freezes and other + problems can result." + :group 'auto-revert + :type 'boolean + :version "21.4") + (defcustom global-auto-revert-ignore-modes '() "List of major modes Global Auto-Revert Mode should not check." :group 'auto-revert *************** *** 311,316 **** --- 320,328 ---- (unless (buffer-modified-p) (let ((buffer (current-buffer)) revert eob eoblist) (or (and buffer-file-name + (or (not (file-remote-p buffer-file-name)) + auto-revert-mode + global-auto-revert-remote-files) (file-readable-p buffer-file-name) (not (verify-visited-file-modtime buffer)) (setq revert t)) ============================================================ ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 1:17 ` Stefan Monnier 2004-05-14 1:32 ` Luc Teirlinck 2004-05-14 2:31 ` Luc Teirlinck @ 2004-05-14 11:36 ` Kai Grossjohann 2004-05-14 12:06 ` David Kastrup 2 siblings, 1 reply; 95+ messages in thread From: Kai Grossjohann @ 2004-05-14 11:36 UTC (permalink / raw) Stefan Monnier <monnier@iro.umontreal.ca> writes: >> I do not see why global-auto-revert-mode should increase the >> probability of Tramp being recalled recursively. It certainly > > Because it runs Tramp from a timer. Timers can be run whenever Emacs is > waiting, i.e. it can happen when Tramp is waiting for the other end's > prompt to come up. Eeek. There is nothing in Tramp that anticipates such reentrant calls. What should Tramp do with such calls? Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 11:36 ` Kai Grossjohann @ 2004-05-14 12:06 ` David Kastrup 2004-05-14 17:06 ` Stefan Monnier 2004-05-14 20:29 ` Kai Grossjohann 0 siblings, 2 replies; 95+ messages in thread From: David Kastrup @ 2004-05-14 12:06 UTC (permalink / raw) Cc: emacs-devel Kai Grossjohann <kai@emptydomain.de> writes: > Stefan Monnier <monnier@iro.umontreal.ca> writes: > > >> I do not see why global-auto-revert-mode should increase the > >> probability of Tramp being recalled recursively. It certainly > > > > Because it runs Tramp from a timer. Timers can be run whenever Emacs is > > waiting, i.e. it can happen when Tramp is waiting for the other end's > > prompt to come up. > > Eeek. > > There is nothing in Tramp that anticipates such reentrant calls. > > What should Tramp do with such calls? Work properly if they are on a different connection. Queue them if they are on the same connection. You don't need an explicit queue for that, you can just sleep with accept-process-output and get woken up at a time when there might nothing else be pending anymore. I don't think a timer gets rerun while it is sleeping on that. When the code continues, you probably should check whether something else that was scheduled beforehand has already done the job. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 12:06 ` David Kastrup @ 2004-05-14 17:06 ` Stefan Monnier 2004-05-14 17:54 ` David Kastrup 2004-05-14 20:32 ` Kai Grossjohann 2004-05-14 20:29 ` Kai Grossjohann 1 sibling, 2 replies; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 17:06 UTC (permalink / raw) Cc: Kai Grossjohann, emacs-devel > Work properly if they are on a different connection. Queue them if > they are on the same connection. Can't queue 'em. Scenario: file-exist-p -> Tramp -> accept-process-output <<Now process filters and sentinels and timers can be run>> One of those async thingies calls file-readable-p -> Tramp -> ???? If it's on the same connection Tramp is stuck: its connection is either busy waiting for some answer from the remote host (which is OK: we can wait) or busy waiting for accept-process-output to return so Emacs can react to the remote process's output; but accept-process-output can't return before file-readable-p is finished. Sending new commands to perform file-readable-p canbe tricky because the remote shell might be in any intermediate state, so we'd need to detect this state, save it and restore it when done. Or else open up a new connection. Note that the above also shows that async code is not only run when you call accept-process-output or sit-for or sleep-for or read-kbd-sequence: it can also be run when you call file-exists-p. I.e. (let ((default-directory "/a")) (if (file-exists-p default-directory) default-directory)) can return "/b" (if one of the process filters changes default-directory). Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 17:06 ` Stefan Monnier @ 2004-05-14 17:54 ` David Kastrup 2004-05-14 18:30 ` Stefan Monnier ` (2 more replies) 2004-05-14 20:32 ` Kai Grossjohann 1 sibling, 3 replies; 95+ messages in thread From: David Kastrup @ 2004-05-14 17:54 UTC (permalink / raw) Cc: Kai Grossjohann, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: > > Work properly if they are on a different connection. Queue them if > > they are on the same connection. > > Can't queue 'em. > > Scenario: > > file-exist-p -> Tramp -> accept-process-output > <<Now process filters and sentinels and timers can be run>> > One of those async thingies calls > file-readable-p -> Tramp -> ???? > > If it's on the same connection Tramp is stuck: its connection is either > busy waiting for some answer from the remote host (which is OK: we can > wait) or busy waiting for accept-process-output to return so Emacs can > react to the remote process's output; but accept-process-output can't return > before file-readable-p is finished. So file-readable-p calls accept-process-output, too, which means it is effectively queued. Eventually output arrives. The problem is that the output is for a different operation, but the way "concurrency" works in Emacs, the "async thingy" will be the one that is woken up. So whoever calls accept-process-output must be prepared to deal with preprocessing the accepted output sufficiently so that it can use the connection itself. It would appear that pushing the output into some FIFO should do the trick. Everybody that initiates an operation expecting output will call accept-process-output, and then first check whether there is something in the FIFO for it. Maybe I am too stupid to understand the implications. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 17:54 ` David Kastrup @ 2004-05-14 18:30 ` Stefan Monnier 2004-05-14 19:08 ` Kim F. Storm 2004-05-15 18:33 ` Richard Stallman 2 siblings, 0 replies; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 18:30 UTC (permalink / raw) Cc: Kai Grossjohann, emacs-devel [...] > Maybe I am too stupid to understand the implications. I think the problem is just sufficiently complex that everybody is "too stupid to understand the implications", unless we devise a clear set of guidelines/invariants. Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 17:54 ` David Kastrup 2004-05-14 18:30 ` Stefan Monnier @ 2004-05-14 19:08 ` Kim F. Storm 2004-05-14 19:26 ` David Kastrup 2004-05-14 20:40 ` Kai Grossjohann 2004-05-15 18:33 ` Richard Stallman 2 siblings, 2 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-14 19:08 UTC (permalink / raw) Cc: Kai Grossjohann, Stefan Monnier, emacs-devel David Kastrup <dak@gnu.org> writes: > Stefan Monnier <monnier@iro.umontreal.ca> writes: > > > > Work properly if they are on a different connection. Queue them if > > > they are on the same connection. > > > > Can't queue 'em. > > > > Scenario: > > > > file-exist-p -> Tramp -> accept-process-output > > <<Now process filters and sentinels and timers can be run>> > > One of those async thingies calls > > file-readable-p -> Tramp -> ???? > > > > If it's on the same connection Tramp is stuck: its connection is either > > busy waiting for some answer from the remote host (which is OK: we can > > wait) or busy waiting for accept-process-output to return so Emacs can > > react to the remote process's output; but accept-process-output can't return > > before file-readable-p is finished. > > So file-readable-p calls accept-process-output, too, which means it is > effectively queued. Eventually output arrives. The problem is that > the output is for a different operation, but the way "concurrency" > works in Emacs, the "async thingy" will be the one that is woken up. > So whoever calls accept-process-output must be prepared to deal with > preprocessing the accepted output sufficiently so that it can use the > connection itself. It would appear that pushing the output into some > FIFO should do the trick. Everybody that initiates an operation > expecting output will call accept-process-output, and then first > check whether there is something in the FIFO for it. How does it know where the output from the previous operation ends (or have arrived at all), i.e. how does it know when the output to its own command starts? A simple solution [but probably fully acceptable in practice] would be to have a global remote-busy-p flag that could be tested by async handlers doing file operations - and simply do nothing (in the present activation) if non-nil, i.e. (unless remote-busy-p ...). Then tramp, ange-ftp, etc. could do (let ((remote-busy-p t)) ...) -- Kim F. Storm http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 19:08 ` Kim F. Storm @ 2004-05-14 19:26 ` David Kastrup 2004-05-14 20:33 ` Kim F. Storm 2004-05-14 20:40 ` Kai Grossjohann 1 sibling, 1 reply; 95+ messages in thread From: David Kastrup @ 2004-05-14 19:26 UTC (permalink / raw) Cc: Kai Grossjohann, Stefan Monnier, emacs-devel storm@cua.dk (Kim F. Storm) writes: > David Kastrup <dak@gnu.org> writes: > > > Stefan Monnier <monnier@iro.umontreal.ca> writes: > > > > > > Work properly if they are on a different connection. Queue > > > > them if they are on the same connection. > > > > > > Can't queue 'em. > > > > > > Scenario: > > > > > > file-exist-p -> Tramp -> accept-process-output > > > <<Now process filters and sentinels and timers can be run>> > > > One of those async thingies calls > > > file-readable-p -> Tramp -> ???? > > > > > > If it's on the same connection Tramp is stuck: its connection is > > > either busy waiting for some answer from the remote host (which > > > is OK: we can wait) or busy waiting for accept-process-output to > > > return so Emacs can react to the remote process's output; but > > > accept-process-output can't return before file-readable-p is > > > finished. > > > > So file-readable-p calls accept-process-output, too, which means > > it is effectively queued. Eventually output arrives. The problem > > is that the output is for a different operation, but the way > > "concurrency" works in Emacs, the "async thingy" will be the one > > that is woken up. So whoever calls accept-process-output must be > > prepared to deal with preprocessing the accepted output > > sufficiently so that it can use the connection itself. It would > > appear that pushing the output into some FIFO should do the trick. > > Everybody that initiates an operation expecting output will call > > accept-process-output, and then first check whether there is > > something in the FIFO for it. > > How does it know where the output from the previous operation ends > (or have arrived at all), i.e. how does it know when the output to > its own command starts? The output is yours if nobody else requests it. In short, you work this in the following manner: (if process-is-busy (push my-request process-input-queue) (while (not (member my-request process-output-queue)) (work-on-the-queues))) And work-on-the-queues basically loops around accept-process-output. The filter function correlates the output with the currently running command in the remote shell, writes the results into the process-output-queue and moves the next material from the front of process-input-queue into the shell. > be to have a global remote-busy-p flag that could be tested by > async handlers doing file operations - and simply do nothing (in the > present activation) if non-nil, i.e. > > (unless remote-busy-p > ...). Do nothing? How is the task accomplished then? -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 19:26 ` David Kastrup @ 2004-05-14 20:33 ` Kim F. Storm 2004-05-14 21:00 ` David Kastrup ` (3 more replies) 0 siblings, 4 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-14 20:33 UTC (permalink / raw) Cc: Kai Grossjohann, Stefan Monnier, emacs-devel David Kastrup <dak@gnu.org> writes: > > How does it know where the output from the previous operation ends > > (or have arrived at all), i.e. how does it know when the output to > > its own command starts? > > The output is yours if nobody else requests it. In short, you work > this in the following manner: > > (if process-is-busy > (push my-request process-input-queue) > (while (not (member my-request process-output-queue)) > (work-on-the-queues))) > > And work-on-the-queues basically loops around accept-process-output. > The filter function correlates the output with the currently running > command in the remote shell, writes the results into the > process-output-queue and moves the next material from the front of > process-input-queue into the shell. It might be the way for Tramp to do this -- Kai ? > > > be to have a global remote-busy-p flag that could be tested by > > async handlers doing file operations - and simply do nothing (in the > > present activation) if non-nil, i.e. > > > > (unless remote-busy-p > > ...). > > Do nothing? How is the task accomplished then? I was referring to repeating timers running async handlers related to things which are not really required to be run on every activation -- such as auto-revert. A completely different approach would be to NOT run timers from a timer handler (which may happen because timers are too slow to execute). To me, this spells troubles anyway... I have installed a change to avoid running timers inside a timer. There may be problems with that change, but let's see if it has a positive effect on the current problems. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 20:33 ` Kim F. Storm @ 2004-05-14 21:00 ` David Kastrup 2004-05-14 21:19 ` Kim F. Storm 2004-05-14 22:47 ` Luc Teirlinck ` (2 subsequent siblings) 3 siblings, 1 reply; 95+ messages in thread From: David Kastrup @ 2004-05-14 21:00 UTC (permalink / raw) Cc: Kai Grossjohann, Stefan Monnier, emacs-devel storm@cua.dk (Kim F. Storm) writes: > David Kastrup <dak@gnu.org> writes: > > > > be to have a global remote-busy-p flag that could be tested by > > > async handlers doing file operations - and simply do nothing (in the > > > present activation) if non-nil, i.e. > > > > > > (unless remote-busy-p > > > ...). > > > > Do nothing? How is the task accomplished then? > > I was referring to repeating timers running async handlers related > to things which are not really required to be run on every > activation -- such as auto-revert. Ah, ok. But this sounds like one might have some sort of outstanding operations (like saving buffers, auto-reverting or something) where a later entry into the queue would just take a look of whether somebody else is doing something similar or conflicting or overriding or whatever, try to merge the operations somehow and consider both finished together when they get done. For example, if we have creation/auto-save of a file pending in the queue, and then comes deletion after it, we can just consider the creation/save finished. I don't think one needs to bother about atomicity of requests: only operations from different threads/timers/whatever can manage to actually enter stuff into the queues, so there was no guarantee that they were entered in a specific order, and you can just work them off in any old order you like. > A completely different approach would be to NOT run timers from a > timer handler (which may happen because timers are too slow to > execute). > > To me, this spells troubles anyway... > > I have installed a change to avoid running timers inside a timer. > There may be problems with that change, but let's see if it has a > positive effect on the current problems. If a timer does something like accept-process-output, stopping other timers would probably be a mistake. We probably should not run one and the same timer while it has not yet finished, but freeze different ones? -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 21:00 ` David Kastrup @ 2004-05-14 21:19 ` Kim F. Storm 2004-05-14 21:33 ` Stefan Monnier 2004-05-14 22:11 ` David Kastrup 0 siblings, 2 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-14 21:19 UTC (permalink / raw) Cc: Kai Grossjohann, Stefan Monnier, emacs-devel David Kastrup <dak@gnu.org> writes: > > > > I have installed a change to avoid running timers inside a timer. > > There may be problems with that change, but let's see if it has a > > positive effect on the current problems. > > If a timer does something like accept-process-output, stopping other > timers would probably be a mistake. But it seems quite bogus for a timer to do that ... as it blocks interactive use. IMO, timers should be "fast". > > We probably should not run one and the same timer while it has not > yet finished, but freeze different ones? That would be easy (it can be done in timer-event-handler). -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 21:19 ` Kim F. Storm @ 2004-05-14 21:33 ` Stefan Monnier 2004-05-14 22:55 ` Kim F. Storm 2004-05-15 18:33 ` Richard Stallman 2004-05-14 22:11 ` David Kastrup 1 sibling, 2 replies; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 21:33 UTC (permalink / raw) Cc: David Kastrup, Kai Grossjohann, emacs-devel >> If a timer does something like accept-process-output, stopping other >> timers would probably be a mistake. > But it seems quite bogus for a timer to do that ... as it blocks > interactive use. > IMO, timers should be "fast". Agreed, but accept-process-output is not always slow and we don't always get to choose. I've hacked my Emacs to signal an error if accept-process-output is called (without timeout) with inhibit-quit set to non-nil and discovered that some package (IIRC, flyspell) does exactly that. Of course, ispell is a local process that always responds immeditely, right? Anyway: how could flyspell do its job without calling accept-process-output from a timer or a post-command-hook? Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 21:33 ` Stefan Monnier @ 2004-05-14 22:55 ` Kim F. Storm 2004-05-14 23:04 ` Stefan Monnier 2004-05-15 18:33 ` Richard Stallman 1 sibling, 1 reply; 95+ messages in thread From: Kim F. Storm @ 2004-05-14 22:55 UTC (permalink / raw) Cc: David Kastrup, Kai Grossjohann, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: > >> If a timer does something like accept-process-output, stopping other > >> timers would probably be a mistake. > > But it seems quite bogus for a timer to do that ... as it blocks > > interactive use. > > IMO, timers should be "fast". > > Agreed, but accept-process-output is not always slow and we don't always get > to choose. I've hacked my Emacs to signal an error if accept-process-output > is called (without timeout) with inhibit-quit set to non-nil and discovered > that some package (IIRC, flyspell) does exactly that. Of course, ispell > is a local process that always responds immeditely, right? > Anyway: how could flyspell do its job without calling > accept-process-output from a timer or a post-command-hook? timer-event-handler sets inhibit-quit to t before calling the timer's function, so if that function calls accept-process-output, it should explicitly set inhibit-quit to nil -- but how does that affect the timer system ? -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 22:55 ` Kim F. Storm @ 2004-05-14 23:04 ` Stefan Monnier 0 siblings, 0 replies; 95+ messages in thread From: Stefan Monnier @ 2004-05-14 23:04 UTC (permalink / raw) Cc: David Kastrup, Kai Grossjohann, emacs-devel >> Agreed, but accept-process-output is not always slow and we don't always get >> to choose. I've hacked my Emacs to signal an error if accept-process-output >> is called (without timeout) with inhibit-quit set to non-nil and discovered >> that some package (IIRC, flyspell) does exactly that. Of course, ispell >> is a local process that always responds immeditely, right? >> Anyway: how could flyspell do its job without calling >> accept-process-output from a timer or a post-command-hook? > timer-event-handler sets inhibit-quit to t before calling the timer's > function, so if that function calls accept-process-output, it should > explicitly set inhibit-quit to nil -- but how does that affect the > timer system ? It doesn't except that it's while debugging such blocking-with-quit-inhibited bugs that I discovered the above example of a perfectly valid call to accept-process-output from a piece of code that needs to be run from a timer or a post-command-hook. Stefan ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 21:33 ` Stefan Monnier 2004-05-14 22:55 ` Kim F. Storm @ 2004-05-15 18:33 ` Richard Stallman 1 sibling, 0 replies; 95+ messages in thread From: Richard Stallman @ 2004-05-15 18:33 UTC (permalink / raw) Cc: dak, emacs-devel, kai, storm Agreed, but accept-process-output is not always slow and we don't always get to choose. I've hacked my Emacs to signal an error if accept-process-output is called (without timeout) with inhibit-quit set to non-nil and discovered that some package (IIRC, flyspell) does exactly that. Of course, ispell is a local process that always responds immeditely, right? Anyway: how could flyspell do its job without calling accept-process-output from a timer or a post-command-hook? flyspell has to do this, so I think that proves this is legitimate. It could perhaps temporarily turn off all timers while doing this, so that they would not run until later. However, I think it makes more sense to say that timers have to run fast. That is a natural and easily understood requirement. If auto-revert is implemented by telling a post-command-hook or idle hook to do the job, then its timer could run fast. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 21:19 ` Kim F. Storm 2004-05-14 21:33 ` Stefan Monnier @ 2004-05-14 22:11 ` David Kastrup 2004-05-14 22:57 ` Kim F. Storm 1 sibling, 1 reply; 95+ messages in thread From: David Kastrup @ 2004-05-14 22:11 UTC (permalink / raw) Cc: Kai Grossjohann, Stefan Monnier, emacs-devel storm@cua.dk (Kim F. Storm) writes: > David Kastrup <dak@gnu.org> writes: > > > > We probably should not run one and the same timer while it has not > > yet finished, but freeze different ones? > > That would be easy (it can be done in timer-event-handler). Uh, that was a rhetorical question, short for "are you really sure that freezing different timers would be a good idea?". -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 22:11 ` David Kastrup @ 2004-05-14 22:57 ` Kim F. Storm 0 siblings, 0 replies; 95+ messages in thread From: Kim F. Storm @ 2004-05-14 22:57 UTC (permalink / raw) Cc: Kai Grossjohann, Stefan Monnier, emacs-devel David Kastrup <dak@gnu.org> writes: > storm@cua.dk (Kim F. Storm) writes: > > > David Kastrup <dak@gnu.org> writes: > > > > > > We probably should not run one and the same timer while it has not > > > yet finished, but freeze different ones? > > > > That would be easy (it can be done in timer-event-handler). > > Uh, that was a rhetorical question, short for "are you really sure > that freezing different timers would be a good idea?". > Doh! I was referring to the first part of that sentence: > > > We probably should not run one and the same timer while it has not > > > yet finished That would be easy. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 20:33 ` Kim F. Storm 2004-05-14 21:00 ` David Kastrup @ 2004-05-14 22:47 ` Luc Teirlinck 2004-05-14 23:14 ` Kim F. Storm 2004-05-14 22:50 ` Luc Teirlinck 2004-05-14 23:00 ` Luc Teirlinck 3 siblings, 1 reply; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 22:47 UTC (permalink / raw) Cc: dak, monnier, kai, emacs-devel Kim Storm wrote: I have installed a change to avoid running timers inside a timer. There may be problems with that change, but let's see if it has a positive effect on the current problems. Still a crash. Still: (gdb) xbacktrace Invalid number -2147483627 of repetitions. It is a while ago that I have used GDB on a regular basis and I am not terribly familiar with debugging Emacs under GDB. Given the C backtrace below, obtained using bt, I do: (gdb) up 9 #9 0x0813cb75 in Ffuncall (nargs=1, args=0xbffe7980) at eval.c:2783 2783 val = funcall_lambda (fun, numargs, args + 1); (gdb) p *args $4 = 143080985 (gdb) pr Am I doing something stupid? I was expecting to see the name of the Lisp function. (gdb) p *args $7 = 143080985 (gdb) xtype Lisp_Symbol (gdb) xsymbol $8 = (struct Lisp_Symbol *) 0x8873e18 Argument to arithmetic operation not a number or boolean. (gdb) I guess I must be doing something wrong. In absence of better, here is the C backtrace: ===File ~/newbt============================================= (gdb) bt #0 abort () at emacs.c:433 #1 0x0812a5a5 in mark_object (arg=143721618) at alloc.c:5034 #2 0x0812a606 in mark_object (arg=143467901) at alloc.c:5051 #3 0x0812a606 in mark_object (arg=143458309) at alloc.c:5051 #4 0x081294ba in mark_memory (start=0xbffe7720, end=0xbffff57c) at alloc.c:3781 #5 0x08129525 in mark_stack () at alloc.c:4055 #6 0x08129aea in Fgarbage_collect () at alloc.c:4429 #7 0x08165a5d in Fbyte_code (bytestr=143174243, vector=143176372, maxdepth=64) at bytecode.c:522 #8 0x0813cf9f in funcall_lambda (fun=143176652, nargs=0, arg_vector=0xbffe7984) at eval.c:2913 #9 0x0813cb75 in Ffuncall (nargs=1, args=0xbffe7980) at eval.c:2783 #10 0x08165c80 in Fbyte_code (bytestr=143174451, vector=143177972, maxdepth=80) at bytecode.c:689 #11 0x0813cf9f in funcall_lambda (fun=143178172, nargs=5, arg_vector=0xbffe7ac8) at eval.c:2913 #12 0x0813cb75 in Ffuncall (nargs=6, args=0xbffe7ac4) at eval.c:2783 #13 0x08165c80 in Fbyte_code (bytestr=140897419, vector=140909636, maxdepth=96) at bytecode.c:689 #14 0x0813cf9f in funcall_lambda (fun=140296844, nargs=1, arg_vector=0xbffe7c04) at eval.c:2913 #15 0x0813cb75 in Ffuncall (nargs=2, args=0xbffe7c00) at eval.c:2783 #16 0x08165c80 in Fbyte_code (bytestr=140897275, vector=140707364, maxdepth=56) at bytecode.c:689 #17 0x0813cf9f in funcall_lambda (fun=141544356, nargs=1, arg_vector=0xbffe7df8) at eval.c:2913 #18 0x0813cb75 in Ffuncall (nargs=2, args=0xbffe7df4) at eval.c:2783 #19 0x0813c30e in Fapply (nargs=2, args=0xbffe7df4) at eval.c:2179 #20 0x0813c9f6 in Ffuncall (nargs=3, args=0xbffe7df0) at eval.c:2707 #21 0x08165c80 in Fbyte_code (bytestr=143098715, vector=140246412, maxdepth=32) at bytecode.c:689 #22 0x0813cf9f in funcall_lambda (fun=141529212, nargs=2, arg_vector=0xbffe7fd8) at eval.c:2913 #23 0x0813cb75 in Ffuncall (nargs=3, args=0xbffe7fd4) at eval.c:2783 #24 0x0813c30e in Fapply (nargs=3, args=0xbffe7fd4) at eval.c:2179 #25 0x0813c9f6 in Ffuncall (nargs=4, args=0xbffe7fd0) at eval.c:2707 #26 0x08165c80 in Fbyte_code (bytestr=143098683, vector=141549828, maxdepth=40) at bytecode.c:689 #27 0x0813cf9f in funcall_lambda (fun=140695124, nargs=2, arg_vector=0xbffe8124) at eval.c:2913 #28 0x0813cb75 in Ffuncall (nargs=3, args=0xbffe8120) at eval.c:2783 #29 0x0813c7e6 in call2 (fn=138315697, arg1=138312169, arg2=143110907) at eval.c:2542 #30 0x08111f8b in Ffile_attributes (filename=143497499, id_format=138193553) at dired.c:920 #31 0x0813ca96 in Ffuncall (nargs=2, args=0xbffe8270) at eval.c:2729 #32 0x08165c80 in Fbyte_code (bytestr=143082251, vector=141550372, maxdepth=96) at bytecode.c:689 #33 0x0813cf9f in funcall_lambda (fun=141550580, nargs=1, arg_vector=0xbffe8478) at eval.c:2913 #34 0x0813cb75 in Ffuncall (nargs=2, args=0xbffe8474) at eval.c:2783 #35 0x0813c30e in Fapply (nargs=2, args=0xbffe8474) at eval.c:2179 #36 0x0813c9f6 in Ffuncall (nargs=3, args=0xbffe8470) at eval.c:2707 #37 0x08165c80 in Fbyte_code (bytestr=143098715, vector=140246412, maxdepth=32) at bytecode.c:689 #38 0x0813cf9f in funcall_lambda (fun=141529212, nargs=2, arg_vector=0xbffe8658) at eval.c:2913 #39 0x0813cb75 in Ffuncall (nargs=3, args=0xbffe8654) at eval.c:2783 #40 0x0813c30e in Fapply (nargs=3, args=0xbffe8654) at eval.c:2179 #41 0x0813c9f6 in Ffuncall (nargs=4, args=0xbffe8650) at eval.c:2707 #42 0x08165c80 in Fbyte_code (bytestr=143098683, vector=141549828, maxdepth=40) at bytecode.c:689 ---Type <return> to continue, or q <return> to quit--- #43 0x0813cf9f in funcall_lambda (fun=140695124, nargs=2, arg_vector=0xbffe87a4) at eval.c:2913 #44 0x0813cb75 in Ffuncall (nargs=3, args=0xbffe87a0) at eval.c:2783 #45 0x0813c7e6 in call2 (fn=138315697, arg1=138327513, arg2=141535284) at eval.c:2542 #46 0x0810efcc in Fverify_visited_file_modtime (buf=141535284) at fileio.c:5593 #47 0x0813ca83 in Ffuncall (nargs=2, args=0xbffe88a0) at eval.c:2726 #48 0x08165c80 in Fbyte_code (bytestr=140057011, vector=141540396, maxdepth=32) at bytecode.c:689 #49 0x0813cf9f in funcall_lambda (fun=141540636, nargs=0, arg_vector=0xbffe89c4) at eval.c:2913 #50 0x0813cb75 in Ffuncall (nargs=1, args=0xbffe89c0) at eval.c:2783 #51 0x08165c80 in Fbyte_code (bytestr=140056819, vector=141540700, maxdepth=32) at bytecode.c:689 #52 0x0813cf9f in funcall_lambda (fun=141540892, nargs=0, arg_vector=0xbffe8ba8) at eval.c:2913 #53 0x0813cb75 in Ffuncall (nargs=1, args=0xbffe8ba4) at eval.c:2783 #54 0x0813c2ea in Fapply (nargs=2, args=0xbffe8ba4) at eval.c:2175 #55 0x0813c9f6 in Ffuncall (nargs=3, args=0xbffe8ba0) at eval.c:2707 #56 0x08165c80 in Fbyte_code (bytestr=136673299, vector=136673340, maxdepth=32) at bytecode.c:689 #57 0x0813c0ca in Feval (form=136673285) at eval.c:2084 #58 0x0813aef5 in Fcondition_case (args=144192805) at eval.c:1280 #59 0x0816617e in Fbyte_code (bytestr=136673051, vector=136673180, maxdepth=40) at bytecode.c:870 #60 0x0813cf9f in funcall_lambda (fun=136673012, nargs=1, arg_vector=0xbffe8f54) at eval.c:2913 #61 0x0813cb75 in Ffuncall (nargs=2, args=0xbffe8f50) at eval.c:2783 #62 0x0813c7ca in call1 (fn=138245265, arg1=141541020) at eval.c:2520 #63 0x080e84cc in timer_check (do_it_now=1) at keyboard.c:4411 #64 0x0816bf39 in wait_reading_process_input (time_limit=1, microsecs=0, read_kbd=0, do_display=0) at process.c:4128 #65 0x0816b678 in Faccept_process_output (process=143197484, timeout=8, timeout_msecs=138193553) at process.c:3774 #66 0x0813caab in Ffuncall (nargs=3, args=0xbffe9360) at eval.c:2733 #67 0x08165c80 in Fbyte_code (bytestr=143174243, vector=143176372, maxdepth=64) at bytecode.c:689 #68 0x0813cf9f in funcall_lambda (fun=143176652, nargs=0, arg_vector=0xbffe9494) at eval.c:2913 #69 0x0813cb75 in Ffuncall (nargs=1, args=0xbffe9490) at eval.c:2783 #70 0x08165c80 in Fbyte_code (bytestr=143174451, vector=143177972, maxdepth=80) at bytecode.c:689 #71 0x0813cf9f in funcall_lambda (fun=143178172, nargs=6, arg_vector=0xbffe95d8) at eval.c:2913 #72 0x0813cb75 in Ffuncall (nargs=7, args=0xbffe95d4) at eval.c:2783 #73 0x08165c80 in Fbyte_code (bytestr=143176955, vector=143178268, maxdepth=64) at bytecode.c:689 #74 0x0813cf9f in funcall_lambda (fun=143178436, nargs=9, arg_vector=0xbffe9704) at eval.c:2913 #75 0x0813cb75 in Ffuncall (nargs=10, args=0xbffe9700) at eval.c:2783 #76 0x08165c80 in Fbyte_code (bytestr=143095083, vector=143096220, maxdepth=88) at bytecode.c:689 #77 0x0813cf9f in funcall_lambda (fun=140582636, nargs=1, arg_vector=0xbffe9908) at eval.c:2913 #78 0x0813cb75 in Ffuncall (nargs=2, args=0xbffe9904) at eval.c:2783 #79 0x0813c30e in Fapply (nargs=2, args=0xbffe9904) at eval.c:2179 #80 0x0813c9f6 in Ffuncall (nargs=3, args=0xbffe9900) at eval.c:2707 #81 0x08165c80 in Fbyte_code (bytestr=143098715, vector=140246412, maxdepth=32) at bytecode.c:689 #82 0x0813cf9f in funcall_lambda (fun=141529212, nargs=2, arg_vector=0xbffe9ae8) at eval.c:2913 #83 0x0813cb75 in Ffuncall (nargs=3, args=0xbffe9ae4) at eval.c:2783 #84 0x0813c30e in Fapply (nargs=3, args=0xbffe9ae4) at eval.c:2179 ---Type <return> to continue, or q <return> to quit--- #85 0x0813c9f6 in Ffuncall (nargs=4, args=0xbffe9ae0) at eval.c:2707 #86 0x08165c80 in Fbyte_code (bytestr=143098683, vector=141549828, maxdepth=40) at bytecode.c:689 #87 0x0813cf9f in funcall_lambda (fun=140695124, nargs=2, arg_vector=0xbffe9c14) at eval.c:2913 #88 0x0813cb75 in Ffuncall (nargs=3, args=0xbffe9c10) at eval.c:2783 #89 0x08165c80 in Fbyte_code (bytestr=136139755, vector=136139788, maxdepth=32) at bytecode.c:689 #90 0x0813cf9f in funcall_lambda (fun=136139716, nargs=1, arg_vector=0xbffe9d34) at eval.c:2913 #91 0x0813cb75 in Ffuncall (nargs=2, args=0xbffe9d30) at eval.c:2783 #92 0x08165c80 in Fbyte_code (bytestr=143095523, vector=143096572, maxdepth=72) at bytecode.c:689 #93 0x0813cf9f in funcall_lambda (fun=140734892, nargs=5, arg_vector=0xbffe9e74) at eval.c:2913 #94 0x0813cb75 in Ffuncall (nargs=6, args=0xbffe9e70) at eval.c:2783 #95 0x0813c428 in Fapply (nargs=2, args=0xbffe9f54) at eval.c:2231 #96 0x0813c9f6 in Ffuncall (nargs=3, args=0xbffe9f50) at eval.c:2707 #97 0x08165c80 in Fbyte_code (bytestr=143098715, vector=140246412, maxdepth=32) at bytecode.c:689 #98 0x0813cf9f in funcall_lambda (fun=141529212, nargs=6, arg_vector=0xbffea074) at eval.c:2913 #99 0x0813cb75 in Ffuncall (nargs=7, args=0xbffea070) at eval.c:2783 #100 0x0813c428 in Fapply (nargs=3, args=0xbffea154) at eval.c:2231 #101 0x0813c9f6 in Ffuncall (nargs=4, args=0xbffea150) at eval.c:2707 #102 0x08165c80 in Fbyte_code (bytestr=143098683, vector=141549828, maxdepth=40) at bytecode.c:689 #103 0x0813cf9f in funcall_lambda (fun=140695124, nargs=6, arg_vector=0xbffea2a4) at eval.c:2913 #104 0x0813cb75 in Ffuncall (nargs=7, args=0xbffea2a0) at eval.c:2783 #105 0x0813c856 in call6 (fn=138315697, arg1=138327465, arg2=143685203, arg3=138193601, arg4=138193553, arg5=138193553, arg6=138193553) at eval.c:2640 #106 0x0810be1f in Finsert_file_contents (filename=143685203, visit=138193601, beg=138193553, end=138193553, replace=138193553) at fileio.c:3719 #107 0x0813caf9 in Ffuncall (nargs=3, args=0xbfffea00) at eval.c:2759 #108 0x08165c80 in Fbyte_code (bytestr=136153099, vector=136153140, maxdepth=24) at bytecode.c:689 #109 0x0813c0ca in Feval (form=136153085) at eval.c:2084 #110 0x0813aef5 in Fcondition_case (args=143801229) at eval.c:1280 #111 0x0816617e in Fbyte_code (bytestr=136152483, vector=136152684, maxdepth=32) at bytecode.c:870 #112 0x0813cf9f in funcall_lambda (fun=136152412, nargs=6, arg_vector=0xbfffed84) at eval.c:2913 #113 0x0813cb75 in Ffuncall (nargs=7, args=0xbfffed80) at eval.c:2783 #114 0x08165c80 in Fbyte_code (bytestr=136149907, vector=136150580, maxdepth=64) at bytecode.c:689 #115 0x0813cf9f in funcall_lambda (fun=136149836, nargs=4, arg_vector=0xbfffeeb4) at eval.c:2913 #116 0x0813cb75 in Ffuncall (nargs=5, args=0xbfffeeb0) at eval.c:2783 #117 0x08165c80 in Fbyte_code (bytestr=136143923, vector=136143972, maxdepth=48) at bytecode.c:689 #118 0x0813cf9f in funcall_lambda (fun=136143868, nargs=2, arg_vector=0xbfffefe4) at eval.c:2913 #119 0x0813cb75 in Ffuncall (nargs=3, args=0xbfffefe0) at eval.c:2783 #120 0x0813c428 in Fapply (nargs=2, args=0xbffff070) at eval.c:2231 #121 0x0813c793 in apply1 (fn=138299777, arg=143493061) at eval.c:2487 #122 0x081385d5 in Fcall_interactively (function=138299777, record_flag=138193553, keys=138250412) at callint.c:406 #123 0x080ee60d in Fcommand_execute (cmd=138299777, record_flag=138193553, keys=138193553, special=138193553) at keyboard.c:9679 #124 0x080e4963 in command_loop_1 () at keyboard.c:1727 #125 0x0813afe6 in internal_condition_case (bfun=0x80e3a90 <command_loop_1>, ---Type <return> to continue, or q <return> to quit--- handlers=138254481, hfun=0x80e3674 <cmd_error>) at eval.c:1333 #126 0x080e394e in command_loop_2 () at keyboard.c:1264 #127 0x0813ab57 in internal_catch (tag=138248505, func=0x80e3930 <command_loop_2>, arg=138193553) at eval.c:1094 #128 0x080e38dc in command_loop () at keyboard.c:1243 #129 0x080e345b in recursive_edit_1 () at keyboard.c:959 #130 0x080e356f in Frecursive_edit () at keyboard.c:1015 #131 0x080e24ab in main (argc=4, argv=0xbffff814) at emacs.c:1692 #132 0x40317627 in __libc_start_main (main=0x80e17d4 <main>, argc=4, ubp_av=0xbffff814, init=0x804e1b0 <_init>, fini=0x818462c <_fini>, rtld_fini=0x4000dcd4 <_dl_fini>, stack_end=0xbffff80c) at ../sysdeps/generic/libc-start.c:129 ============================================================ ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 22:47 ` Luc Teirlinck @ 2004-05-14 23:14 ` Kim F. Storm 2004-05-14 23:38 ` Luc Teirlinck 0 siblings, 1 reply; 95+ messages in thread From: Kim F. Storm @ 2004-05-14 23:14 UTC (permalink / raw) Cc: dak, monnier, kai, emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > (gdb) p *args > $7 = 143080985 > (gdb) xtype > Lisp_Symbol > (gdb) xsymbol > $8 = (struct Lisp_Symbol *) 0x8873e18 > Argument to arithmetic operation not a number or boolean. > (gdb) Try: p *$8 -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 23:14 ` Kim F. Storm @ 2004-05-14 23:38 ` Luc Teirlinck 0 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 23:38 UTC (permalink / raw) Cc: dak, monnier, kai, emacs-devel I am just blundering along, I guess. I got function names to print out correctly at higher up frames, but then I went back to that particular frame and did as you suggested: (gdb) down 83 #0 abort () at emacs.c:433 433 kill (getpid (), SIGABRT); (gdb) up 9 #9 0x0813cb75 in Ffuncall (nargs=1, args=0xbffe7980) at eval.c:2783 2783 val = funcall_lambda (fun, numargs, args + 1); (gdb) p *args $24 = 143080985 (gdb) pr (gdb) p *args $25 = 143080985 (gdb) xtype Lisp_Symbol (gdb) xsymbol $26 = (struct Lisp_Symbol *) 0x8873e18 Argument to arithmetic operation not a number or boolean. (gdb) p *$26 $27 = { gcmarkbit = 1, indirect_variable = 0, constant = 0, interned = 2, xname = 141437083, value = 138193577, function = 143176652, plist = 138193553, next = 0x8453fb8 } Then I instinctively typed: (gdb) pr Should have known better: Program received signal SIGSEGV, Segmentation fault. 0x0814c829 in print_object (obj=17, printcharfun=138277665, escapeflag=1) at print.c:1607 1607 register unsigned char *p = SDATA (SYMBOL_NAME (obj)); The program being debugged was signaled while in a function called from GDB. GDB remains in the frame where the signal was received. To change this behavior use "set unwindonsignal on" Evaluation of the expression containing the function (debug_print) will be abandoned. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 20:33 ` Kim F. Storm 2004-05-14 21:00 ` David Kastrup 2004-05-14 22:47 ` Luc Teirlinck @ 2004-05-14 22:50 ` Luc Teirlinck 2004-05-14 23:00 ` Luc Teirlinck 3 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 22:50 UTC (permalink / raw) Cc: dak, emacs-devel, monnier, kai, storm >From my previous message: (gdb) up 9 #9 0x0813cb75 in Ffuncall (nargs=1, args=0xbffe7980) at eval.c:2783 2783 val = funcall_lambda (fun, numargs, args + 1); (gdb) p *args $4 = 143080985 (gdb) pr Am I doing something stupid? I was expecting to see the name of the Lisp function. I believe I see know. I was not really reading well enough. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 20:33 ` Kim F. Storm ` (2 preceding siblings ...) 2004-05-14 22:50 ` Luc Teirlinck @ 2004-05-14 23:00 ` Luc Teirlinck 3 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 23:00 UTC (permalink / raw) Cc: dak, emacs-devel, monnier, kai, storm >From my previous message: I believe I see know. I was not really reading well enough. I am afraid that I still do not get it. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 19:08 ` Kim F. Storm 2004-05-14 19:26 ` David Kastrup @ 2004-05-14 20:40 ` Kai Grossjohann 2004-05-14 23:26 ` David Kastrup 1 sibling, 1 reply; 95+ messages in thread From: Kai Grossjohann @ 2004-05-14 20:40 UTC (permalink / raw) storm@cua.dk (Kim F. Storm) writes: > How does it know where the output from the previous operation ends > (or have arrived at all), i.e. how does it know when the output to its > own command starts? I think that David is suggesting that the timer does not start its own command until the command-in-process is finished. So it goes like this: - User invokes Tramp in some manner. - Tramp sends a command to the remote host and enters a loop calling accept-process-output until the command is complete. (Tramp knows to look for a shell prompt to see that the command is complete.) - This loop is interrupted by a timer. The timer sees that such a loop is in progress already. - The timer enters its own accept-process-output loop, fetching output from the unknown command until the command completes (shell prompt arrives). It stashes the output away someplace safe. - Now the timer is free to do its own thing: it sends a command to the remote end, uses the accept-process-output loop to fetch the result, is happy. - Just before returning, the timer fetches the output from the safe place and inserts it into the connection buffer. Then the timer sends a no-op command to the remote end (but does *not* invoke accept-process-output) and returns. - This is the point in time where the "master" Emacs process gets to do something. It's still inside accept-process-output. The no-op command sent by the timer produces output (a shell prompt) which the now-awakened accept-process-output is happy to receive, and it wakes up. - The master accept-process-output loop sees nothing amiss and just blissfully processes the buffer contents as if nothing strange happened. I hope I got that right. It seems rather fragile to me. Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 20:40 ` Kai Grossjohann @ 2004-05-14 23:26 ` David Kastrup 2004-05-15 16:19 ` Kai Grossjohann 0 siblings, 1 reply; 95+ messages in thread From: David Kastrup @ 2004-05-14 23:26 UTC (permalink / raw) Cc: emacs-devel Kai Grossjohann <kai.grossjohann@gmx.net> writes: > storm@cua.dk (Kim F. Storm) writes: > > > How does it know where the output from the previous operation ends > > (or have arrived at all), i.e. how does it know when the output to its > > own command starts? > > I think that David is suggesting that the timer does not start its > own command until the command-in-process is finished. So it goes > like this: > > - User invokes Tramp in some manner. > > - Tramp sends a command to the remote host and enters a loop calling > accept-process-output until the command is complete. (Tramp knows > to look for a shell prompt to see that the command is complete.) > > - This loop is interrupted by a timer. The timer sees that such a > loop is in progress already. > > - The timer enters its own accept-process-output loop, fetching > output from the unknown command until the command completes (shell > prompt arrives). It stashes the output away someplace safe. > > - Now the timer is free to do its own thing: it sends a command to > the remote end, uses the accept-process-output loop to fetch the > result, is happy. > > - Just before returning, the timer fetches the output from the safe > place and inserts it into the connection buffer. Then the timer > sends a no-op command to the remote end (but does *not* invoke > accept-process-output) and returns. > > - This is the point in time where the "master" Emacs process gets to > do something. It's still inside accept-process-output. The no-op > command sent by the timer produces output (a shell prompt) which > the now-awakened accept-process-output is happy to receive, and it > wakes up. Uh, much too complicated. accept-process-output does _not_ read any process-output. It just puts a process to sleep until something has been processed. Since it is not processing the output itself (but relies on a filter function or the default buffer insertion to do so), we don't need any do-nothing commands or whatsoever. When output arrives, the currently active filter function will be called with it and _all_ accept-process-output calling threads will get woken up again. So they will need to check whether their respective work has already been done or aborted by the filter routine. > I hope I got that right. Too complicated, I guess. > It seems rather fragile to me. Same here. The filter routine just should just mark the last command sent to the remote shell as finished, and then see whether any job/command is still pending. If yes, it sends it. Every accept-process-output checks whether its job is finished, in which case it returns, has been dequeued by force (closed connection whatever) in which case a signal is probably thrown, or is either still in queue or currently in progress. In which case accept-process-output is called again. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 23:26 ` David Kastrup @ 2004-05-15 16:19 ` Kai Grossjohann 2004-05-15 17:01 ` David Kastrup 0 siblings, 1 reply; 95+ messages in thread From: Kai Grossjohann @ 2004-05-15 16:19 UTC (permalink / raw) David Kastrup <dak@gnu.org> writes: > Uh, much too complicated. I'm afraid I don't understand you: Do you mean that just the last step is too complicated, or that the whole procedure that I described is too complicated? At some point, I thought I understood what you were suggesting, but now I'm not sure anymore. Let me try to describe my understanding with less detail, then please tell me if I got it at least at this level. Whenever Tramp is invoked, it looks to see if the connection buffer is busy. If it is, it knows that Tramp is interrupting itself, so to speak. If this is the case (Tramp is interrupting itself), Tramp "takes over" the command in progress, fetches all output from it and stashes it someplace safe. Then it does its own thing. Afterwards, it gets the output from the safe place, inserts it into the connection buffer, and makes it appear to the "interrupted" "master" Tramp as if nothing had happened in the meantime. You were also talking about a queue of commands, which I'm not seeing. So this would be an indication that I misunderstood you. (The above does imply a stack of commands, corresponding to interruptions of interruptions.) > When output arrives, the currently active filter function will be > called with it and _all_ accept-process-output calling threads will > get woken up again. So they will need to check whether their > respective work has already been done or aborted by the filter > routine. Hm. If more than one thread of execution will be woken up at the same time, then surely the above procedure won't work. > I wrote: > >> It seems rather fragile to me. > > Same here. The filter routine just should just mark the last command > sent to the remote shell as finished, and then see whether any > job/command is still pending. If yes, it sends it. Maybe once I understand your proposal I will understand that it is less fragile... Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 16:19 ` Kai Grossjohann @ 2004-05-15 17:01 ` David Kastrup 2004-05-15 17:26 ` Kai Grossjohann 0 siblings, 1 reply; 95+ messages in thread From: David Kastrup @ 2004-05-15 17:01 UTC (permalink / raw) Cc: emacs-devel Kai Grossjohann <kai.grossjohann@gmx.net> writes: > David Kastrup <dak@gnu.org> writes: > > > Uh, much too complicated. > > I'm afraid I don't understand you: Do you mean that just the last > step is too complicated, or that the whole procedure that I described > is too complicated? The whole procedure. > At some point, I thought I understood what you were suggesting, but > now I'm not sure anymore. > > Let me try to describe my understanding with less detail, then please > tell me if I got it at least at this level. > > Whenever Tramp is invoked, it looks to see if the connection > buffer is busy. If it is, it knows that Tramp is interrupting > itself, so to speak. > > If this is the case (Tramp is interrupting itself), Tramp "takes > over" the command in progress, fetches all output from it and > stashes it someplace safe. Look, you are talking all the time about "Tramp" as if it was a sentient being. It isn't. "Tramp" consists of two entirely different pieces: the user level routines (of which several can be running at once in different "threads" or Emacs' equivalence to it) and the filter routine. Those are basically independent from each other. In order avoid unnecessary lockup in process-send-string, and problems with identifying responses and input, we might not just indiscriminately call process-send-string when there are already outstanding commands. Ok, here is what the filter routine does when it is called: it collects the stuff from the output until it has a completely reply to the currently sent command available. If it has, it takes the request and marks it as completed (tacking the results to the request). [Entry point for getting a command on the way:] It then takes a look whether there are still outstanding commands in the queue. If there are, it takes the next one from the queue and sends it through, marking it as being in progress. That's all. The filter routine never changes, it does just that. There is only one filter routine at work at most at any time. Now for the user level stuff: it knows it needs to get commands through. So it makes a request data structure and tacks it to the end of the current queue (or, if the command is particularly urgent, like when we are doing autorevert checking, to the _front_ of the current queue) and then calls accept-process-output on the process repeatedly until the command finally is marked as being processed. Then it takes the results and returns. That is all. > Then it does its own thing. > > Afterwards, it gets the output from the safe place, inserts it > into the connection buffer, and makes it appear to the > "interrupted" "master" Tramp as if nothing had happened in the > meantime. > > You were also talking about a queue of commands, which I'm not > seeing. So this would be an indication that I misunderstood you. Probably. You don't just want to stuff the pipe with process-send-string indiscriminately, it may stall at one time, and then a different thread might feel tempted to stuff its material right in the wrong place. So at any time, at most one thread may be allowed to send strings. If there is already a reason for the filter routine to run (because some command is in the process of being transmitted), then the requesting process will _not_ write to the tty, but meekly queue his request into a request queue and hope that the filter routine will at some time be friendly enough to process it. > (The above does imply a stack of commands, corresponding to > interruptions of interruptions.) Quite. Since Emacs does not have true concurrency, "deeper" commands in the "user stack" will not get resumed or finished until "higher" commands are completed. Which they eventually will, since the filter routine will cater for everything in the queue. For stuff like autorevert it would be a good idea to check whether the queue already contains some request for the same thing. If it does, no need to add another one. Similar things hold for fetching a particular directory into the directory buffer, although here the resulting information _is_ needed, so one needs to call accept-process-output until the information has arrived, even though it was requested by a different thread/layer/task/whatyouwantocallit. > > When output arrives, the currently active filter function will be > > called with it and _all_ accept-process-output calling threads > > will get woken up again. So they will need to check whether their > > respective work has already been done or aborted by the filter > > routine. > > Hm. If more than one thread of execution will be woken up at the > same time, then surely the above procedure won't work. Emacs can't do anything "at the same time". We don't have concurrency. It has a stack of outstanding commands started from the main loop (and a list of things it may call from the main loop). It works this stack off top to bottom. Even if Emacs had separate stacks for the main loops, it would not schedule between them except when control is explicitly yielded (can happen with I/O). -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 17:01 ` David Kastrup @ 2004-05-15 17:26 ` Kai Grossjohann 2004-05-15 18:18 ` David Kastrup 0 siblings, 1 reply; 95+ messages in thread From: Kai Grossjohann @ 2004-05-15 17:26 UTC (permalink / raw) David Kastrup <dak@gnu.org> writes: > Kai Grossjohann <kai.grossjohann@gmx.net> writes: > >> David Kastrup <dak@gnu.org> writes: >> >> > Uh, much too complicated. >> >> I'm afraid I don't understand you: Do you mean that just the last >> step is too complicated, or that the whole procedure that I described >> is too complicated? > > The whole procedure. Okay. I agree. Though our ideas of simplicity are different -- I was thinking of using multiple connection buffers. >> At some point, I thought I understood what you were suggesting, but >> now I'm not sure anymore. >> >> Let me try to describe my understanding with less detail, then please >> tell me if I got it at least at this level. >> >> Whenever Tramp is invoked, it looks to see if the connection >> buffer is busy. If it is, it knows that Tramp is interrupting >> itself, so to speak. >> >> If this is the case (Tramp is interrupting itself), Tramp "takes >> over" the command in progress, fetches all output from it and >> stashes it someplace safe. > > Look, you are talking all the time about "Tramp" as if it was a > sentient being. It isn't. It must be! It even changed names multiple times, this tells us it knows what it likes. > "Tramp" consists of two entirely different pieces: the user level > routines (of which several can be running at once in different > "threads" or Emacs' equivalence to it) and the filter routine. Those > are basically independent from each other. What is a filter routine? If you are talking about process filters, in the sense of set-process-filter, then there are no filter routines in Tramp. Are you suggesting to change Tramp such that there is a filter routine? [time passes] Oh, I see that Michael added a process filter in one part of Tramp, to support async shell commands. > In order avoid unnecessary lockup in process-send-string, and > problems with identifying responses and input, we might not just > indiscriminately call process-send-string when there are already > outstanding commands. Yes. > Ok, here is what the filter routine does when it is called: it > collects the stuff from the output until it has a completely reply to > the currently sent command available. If it has, it takes the > request and marks it as completed (tacking the results to the > request). > > [Entry point for getting a command on the way:] > It then takes a look whether there are still outstanding commands in > the queue. If there are, it takes the next one from the queue and > sends it through, marking it as being in progress. > > That's all. The filter routine never changes, it does just that. > There is only one filter routine at work at most at any time. > > Now for the user level stuff: it knows it needs to get commands > through. So it makes a request data structure and tacks it to the end > of the current queue (or, if the command is particularly urgent, like > when we are doing autorevert checking, to the _front_ of the current > queue) and then calls accept-process-output on the process repeatedly > until the command finally is marked as being processed. Then it > takes the results and returns. > > That is all. Okay, this is much clearer. Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 17:26 ` Kai Grossjohann @ 2004-05-15 18:18 ` David Kastrup 2004-05-16 14:11 ` Kai Grossjohann 0 siblings, 1 reply; 95+ messages in thread From: David Kastrup @ 2004-05-15 18:18 UTC (permalink / raw) Cc: emacs-devel Kai Grossjohann <kai.grossjohann@gmx.net> writes: > David Kastrup <dak@gnu.org> writes: > > > Kai Grossjohann <kai.grossjohann@gmx.net> writes: > > > >> David Kastrup <dak@gnu.org> writes: > >> > >> > Uh, much too complicated. > >> > >> I'm afraid I don't understand you: Do you mean that just the last > >> step is too complicated, or that the whole procedure that I described > >> is too complicated? > > > > The whole procedure. > > Okay. I agree. Though our ideas of simplicity are different -- I > was thinking of using multiple connection buffers. Those have to be set up and initialized. You know that Tramp initialization takes a _lot_ of time. If we have some timer-related events, it is likely that we will get an indefinite stack of sessions all occupied with initializing a connection. > > Look, you are talking all the time about "Tramp" as if it was a > > sentient being. It isn't. > > It must be! It even changed names multiple times, this tells us it > knows what it likes. Pffft. With that sort of reasoning, XEmacs aka Lucid Emacs aka Emacs19-to-be-well-at-some-time-we-thought-so would be three times as intelligent as Emacs. Don't bother commenting on that: it's no fun starting a flame war if we are all supposed to be on the same side. > > "Tramp" consists of two entirely different pieces: the user level > > routines (of which several can be running at once in different > > "threads" or Emacs' equivalence to it) and the filter routine. > > Those are basically independent from each other. > > What is a filter routine? If you are talking about process filters, > in the sense of set-process-filter, then there are no filter > routines in Tramp. Oh, I see. Well, it doesn't matter, strictly speaking. Whoever calls accept-process-output should feel qualified, when being woken up, to do the work of the non-existent process-filter, and if after that its own task has not been finished (or even started), call accept-process-output again. > Are you suggesting to change Tramp such that there is a filter > routine? Whether you call the routine by an actual process-filter, or some task having called accept-process-filter does it, does not make _much_ of a difference. However, a separate process filter can be called at slightly more times than an accept-process-filter task can be woken up, (because the process filter starts without a personal stack frame, and thus need not be "on top" of the stack), so the process filter approach would probably provide a lower latency. > > Ok, here is what the filter routine does when it is called: it > > collects the stuff from the output until it has a completely reply to > > the currently sent command available. If it has, it takes the > > request and marks it as completed (tacking the results to the > > request). > > > > [Entry point for getting a command on the way:] > > It then takes a look whether there are still outstanding commands in > > the queue. If there are, it takes the next one from the queue and > > sends it through, marking it as being in progress. > > > > That's all. The filter routine never changes, it does just that. > > There is only one filter routine at work at most at any time. > > > > Now for the user level stuff: it knows it needs to get commands > > through. So it makes a request data structure and tacks it to the end > > of the current queue (or, if the command is particularly urgent, like > > when we are doing autorevert checking, to the _front_ of the current > > queue) and then calls accept-process-output on the process repeatedly > > until the command finally is marked as being processed. Then it > > takes the results and returns. Of course, if the shell is idle at the time that a command has been entered into the queue, the user level routine should manually call the above "Entry point for getting..." before relapsing into accept-process-output, or nothing will get done, ever. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 18:18 ` David Kastrup @ 2004-05-16 14:11 ` Kai Grossjohann 0 siblings, 0 replies; 95+ messages in thread From: Kai Grossjohann @ 2004-05-16 14:11 UTC (permalink / raw) Cc: emacs-devel David Kastrup <dak@gnu.org> writes: > Kai Grossjohann <kai.grossjohann@gmx.net> writes: > >> David Kastrup <dak@gnu.org> writes: >> >> > Kai Grossjohann <kai.grossjohann@gmx.net> writes: >> > >> >> David Kastrup <dak@gnu.org> writes: >> >> >> >> > Uh, much too complicated. >> >> >> >> I'm afraid I don't understand you: Do you mean that just the last >> >> step is too complicated, or that the whole procedure that I described >> >> is too complicated? >> > >> > The whole procedure. >> >> Okay. I agree. Though our ideas of simplicity are different -- I >> was thinking of using multiple connection buffers. > > Those have to be set up and initialized. You know that Tramp > initialization takes a _lot_ of time. If we have some timer-related > events, it is likely that we will get an indefinite stack of sessions > all occupied with initializing a connection. I was thinking of letting the additional connection buffer stay around. I agree, however, that bootstrapping is somewhat difficult: how do I make it so that the second buffer appears quickly enough for auto-revert to be of some use... >> > "Tramp" consists of two entirely different pieces: the user level >> > routines (of which several can be running at once in different >> > "threads" or Emacs' equivalence to it) and the filter routine. >> > Those are basically independent from each other. >> >> What is a filter routine? If you are talking about process filters, >> in the sense of set-process-filter, then there are no filter >> routines in Tramp. > > Oh, I see. Well, it doesn't matter, strictly speaking. Whoever calls > accept-process-output should feel qualified, when being woken up, to > do the work of the non-existent process-filter, That work is to wait for the next shell prompt. If it isn't there, call accept-process-output again. > and if after that its own task has not been finished (or even > started), call accept-process-output again. Yes. Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 17:54 ` David Kastrup 2004-05-14 18:30 ` Stefan Monnier 2004-05-14 19:08 ` Kim F. Storm @ 2004-05-15 18:33 ` Richard Stallman 2004-05-16 14:13 ` Kai Grossjohann 2 siblings, 1 reply; 95+ messages in thread From: Richard Stallman @ 2004-05-15 18:33 UTC (permalink / raw) Cc: kai, monnier, emacs-devel I think it is best to prevent recursive calls to Tramp. One way to do this is to turn off auto-revert mode while inside of any Tramp operation. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-15 18:33 ` Richard Stallman @ 2004-05-16 14:13 ` Kai Grossjohann 2004-05-17 1:14 ` Luc Teirlinck 2004-05-17 22:58 ` Richard Stallman 0 siblings, 2 replies; 95+ messages in thread From: Kai Grossjohann @ 2004-05-16 14:13 UTC (permalink / raw) Cc: David Kastrup, monnier, emacs-devel Richard Stallman <rms@gnu.org> writes: > I think it is best to prevent recursive calls to Tramp. > One way to do this is to turn off auto-revert mode > while inside of any Tramp operation. Okay, so I suggest to extend Tramp such that it looks to see if the buffer is busy, and if so, it signals an error. Additionally, global-auto-revert-mode could be changed so that auto-reverting is off for remote files. WDYT? Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 14:13 ` Kai Grossjohann @ 2004-05-17 1:14 ` Luc Teirlinck 2004-05-17 22:58 ` Richard Stallman 1 sibling, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-17 1:14 UTC (permalink / raw) Cc: dak, emacs-devel, rms, monnier Kai Grossjohann wrote: Okay, so I suggest to extend Tramp such that it looks to see if the buffer is busy, and if so, it signals an error. Additionally, global-auto-revert-mode could be changed so that auto-reverting is off for remote files. WDYT? That looks good to me. Disabling auto-reverting of remote files is trivial, it is just adding a single call to `file-remote-p'. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-16 14:13 ` Kai Grossjohann 2004-05-17 1:14 ` Luc Teirlinck @ 2004-05-17 22:58 ` Richard Stallman 2004-05-18 3:44 ` Luc Teirlinck 1 sibling, 1 reply; 95+ messages in thread From: Richard Stallman @ 2004-05-17 22:58 UTC (permalink / raw) Cc: dak, monnier, emacs-devel > I think it is best to prevent recursive calls to Tramp. > One way to do this is to turn off auto-revert mode > while inside of any Tramp operation. Okay, so I suggest to extend Tramp such that it looks to see if the buffer is busy, and if so, it signals an error. We could do that, but we don't want attempts to auto-revert to cause errors. How about turning off auto-revert mode while inside Tramp? ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-17 22:58 ` Richard Stallman @ 2004-05-18 3:44 ` Luc Teirlinck 0 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-18 3:44 UTC (permalink / raw) Cc: kai.grossjohann, monnier, dak, emacs-devel Richard Stallman wrote: We could do that, but we don't want attempts to auto-revert to cause errors. How about turning off auto-revert mode while inside Tramp? Tramp can take a long time on slow connections. It typically takes me 40-45 seconds to visit sequences.texi using Tramp with ssh, when auto-revert-mode is disabled. It sometimes takes longer than that, and sequences.texi is not _that_ long of a file. With a default-value for auto-revert-interval of five seconds the delay in reverting might be confusing to the user. If we turn off auto-reverting of remote files altogether, there is no problem. Then there will be no attempts to auto-revert. If not, then I believe that we at least need an option to disable auto-reverting of remote files, say `global-auto-revert-remote-files'. If we go for the option, then we could also say that auto-reverting of a remote file would be enabled, even if `global-auto-revert-remote-files' is nil, if auto-revert-mode (as opposed to global-auto-revert-mode) is enabled in the buffer (since then the user explicitly asked for it). This would be consistent with `global-auto-revert-non-file-buffers'. If Tramp bound an internal variable `tramp-active' or whatever to t, auto-revert-mode could unconditionally disable auto-reverting of remote files if that variable is non-nil. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 17:06 ` Stefan Monnier 2004-05-14 17:54 ` David Kastrup @ 2004-05-14 20:32 ` Kai Grossjohann 2004-05-14 21:35 ` Michael Albinus 1 sibling, 1 reply; 95+ messages in thread From: Kai Grossjohann @ 2004-05-14 20:32 UTC (permalink / raw) Stefan Monnier <monnier@iro.umontreal.ca> writes: > Sending new commands to perform file-readable-p canbe tricky because > the remote shell might be in any intermediate state, so we'd need to > detect this state, save it and restore it when done. Or else open > up a new connection. Opening a new connection actually seems the most promising approach to this humble poster. Managing multiple connections is already on the todo list -- it could be used for compilation buffers, for instance. So just opening a new connection on a reentrant call would be fairly easy to do, once the infrastructure is in place. Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 20:32 ` Kai Grossjohann @ 2004-05-14 21:35 ` Michael Albinus 2004-05-15 16:22 ` Kai Grossjohann 0 siblings, 1 reply; 95+ messages in thread From: Michael Albinus @ 2004-05-14 21:35 UTC (permalink / raw) Cc: emacs-devel Kai Grossjohann <kai.grossjohann@gmx.net> writes: > Stefan Monnier <monnier@iro.umontreal.ca> writes: > >> Sending new commands to perform file-readable-p canbe tricky because >> the remote shell might be in any intermediate state, so we'd need to >> detect this state, save it and restore it when done. Or else open >> up a new connection. > > Opening a new connection actually seems the most promising approach to > this humble poster. Managing multiple connections is already on the > todo list -- it could be used for compilation buffers, for instance. > So just opening a new connection on a reentrant call would be fairly > easy to do, once the infrastructure is in place. I have the feeling that at first we need to have a locking mechanism in Tramp for "atomic" file operations. This would prevent us from mixing different commands send to the remote side, which seems to be the cause of the trouble. File operations will be handled one at a time from a queue. Obvious disadvantage is delay in response. Optimization (like multiple connections as mentioned by Kai) would be the next step. But I doubt it is usefull for such operations like `file-readable-p', given the overhead of a new connection. > Kai Best regards, Michael. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 21:35 ` Michael Albinus @ 2004-05-15 16:22 ` Kai Grossjohann 0 siblings, 0 replies; 95+ messages in thread From: Kai Grossjohann @ 2004-05-15 16:22 UTC (permalink / raw) Michael Albinus <michael.albinus@gmx.de> writes: > Optimization (like multiple connections as mentioned by Kai) would be > the next step. But I doubt it is usefull for such operations like > `file-readable-p', given the overhead of a new connection. I was thinking of using multiple connections not as an optimization regarding speed, but more of an optimization regarding complexity. It seems to me it would be much easier to implement. My plan was to keep the additional connections open; so speaking of opening a connection as overhead for `file-readable-p' is a little bit misleading: it would only happen seldom. Given the frequency in which auto-revert is doing things, I expect that in effect a connection would be dedicated to auto-revert. Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-14 12:06 ` David Kastrup 2004-05-14 17:06 ` Stefan Monnier @ 2004-05-14 20:29 ` Kai Grossjohann 1 sibling, 0 replies; 95+ messages in thread From: Kai Grossjohann @ 2004-05-14 20:29 UTC (permalink / raw) David Kastrup <dak@gnu.org> writes: > Kai Grossjohann <kai@emptydomain.de> writes: > >> What should Tramp do with [reentrant] calls? > > Work properly if they are on a different connection. Okay, that can be made to work. > Queue them if they are on the same connection. You don't need an > explicit queue for that, you can just sleep with > accept-process-output and get woken up at a time when there might > nothing else be pending anymore. I don't think a timer gets rerun > while it is sleeping on that. So user does C-x C-f on a large file using an inline method. Tramp starts to transfer the base64 data across the wire... And then the timer kicks in. Tramp notices it is already busy in that buffer, so the timer waits... and waits... and waits... It could be quite a while until the large file is transferred. (I don't see how accept-process-output can wake me up when there is no output, btw. But, as everybody else here, I'm too stupid to see the consequences :-) However, the difference is that you seem to have an idea how to solve it, and I don't.) Kai ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-13 23:24 ` Luc Teirlinck 2004-05-13 23:46 ` Kim F. Storm @ 2004-05-14 21:02 ` Richard Stallman 1 sibling, 0 replies; 95+ messages in thread From: Richard Stallman @ 2004-05-14 21:02 UTC (permalink / raw) Cc: kai, emacs-devel, storm (gdb) xbacktrace Invalid number -2147483630 of repetitions. Can you investigate the bug in xbacktrace? Fixing that is very important. If you can't find the first bug, but you can fix xbacktrace to operate correctly in this case, it will be an important contribution. Meanwhile, you can find out what Lisp functions are running in this case using the old-fashioned method, by going to Ffuncall frames and typing p *args xsymbol Tramp handler calls accept-process-output, which calls wait_reading_process_input, which may run timers (and does so). ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-13 23:11 ` Kim F. Storm 2004-05-13 23:24 ` Luc Teirlinck @ 2004-05-14 0:54 ` Luc Teirlinck 2004-05-14 2:13 ` Luc Teirlinck 2 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 0:54 UTC (permalink / raw) Cc: kai, emacs-devel Kim Storm wrote: So we in three levels of tramp handlers and two levels of accept-process-output, wait_reading_process_input, and timer_check. I just installed a change to make wait_reading_process_input reentrant which may or may not be relevant to this crash. Apparently it is relevant of sorts. Note that Lars Hansen has reports and backtraces of crashes using Tramp _without_ global-auto-revert-mode being enabled. Maybe these do not happen any more after your change. Mine definitely do not happen any more but for strange reasons. Before I visited one large file using Tramp-ssh, without problems. Then visiting a second large file got an "Invalid base64 data" error (just because it is the second file). Tried again. Crash. Now when I visit one file using Tramp-ssh, Emacs freezes. In my personal Emacs, I can still quit with C-g because I put in calls to with-local-quit. In CVS Emacs, this is an outright freeze. My with-local-quits do not help very much, because it refreezes 0-5 seconds later. I can not check whether the crash still occurs after your changes, because I can no longer carry out the recipe to produce the crash. I wonder why I was able to do so _before_ your change. The cause for the freezing bug seems obvious: It is now completely clear that global-auto-revert-mode should not try to revert remote files over a slow connection. I plan to disable auto-reverting of remote files using global-auto-revert-mode, with a user option to re-enable it for people with fast connections that are permanently on-line. For other people, there just seems to be too much ugliness involved. I believe I will do this tomorrow. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
* Re: Tramp with global-auto-revert-mode. 2004-05-13 23:11 ` Kim F. Storm 2004-05-13 23:24 ` Luc Teirlinck 2004-05-14 0:54 ` Luc Teirlinck @ 2004-05-14 2:13 ` Luc Teirlinck 2 siblings, 0 replies; 95+ messages in thread From: Luc Teirlinck @ 2004-05-14 2:13 UTC (permalink / raw) Cc: kai, emacs-devel, storm >From my previous message: Before I visited one large file using Tramp-ssh, without problems. Then visiting a second large file got an "Invalid base64 data" error (just because it is the second file). Tried again. Crash. Now when I visit one file using Tramp-ssh, Emacs freezes. In my personal Emacs, I can still quit with C-g because I put in calls to with-local-quit. In CVS Emacs, this is an outright freeze. My with-local-quits do not help very much, because it refreezes 0-5 seconds later. The situation I described above seems to have been due to a temporary deterioration of my connection. Everything is back as before now. The crash still occurs, exactly as described above. Kim's recent change seems to have had no effect on the situation. Sincerely, Luc. ^ permalink raw reply [flat|nested] 95+ messages in thread
end of thread, other threads:[~2004-05-23 17:21 UTC | newest] Thread overview: 95+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-05-12 22:54 Tramp with global-auto-revert-mode Luc Teirlinck 2004-05-12 23:26 ` Luc Teirlinck 2004-05-13 23:11 ` Kim F. Storm 2004-05-13 23:24 ` Luc Teirlinck 2004-05-13 23:46 ` Kim F. Storm 2004-05-14 0:08 ` Luc Teirlinck 2004-05-14 1:17 ` Stefan Monnier 2004-05-14 1:32 ` Luc Teirlinck 2004-05-14 2:35 ` Stefan Monnier 2004-05-14 2:53 ` Luc Teirlinck 2004-05-14 3:08 ` Luc Teirlinck 2004-05-14 4:16 ` Stefan Monnier 2004-05-14 4:45 ` Luc Teirlinck 2004-05-14 5:09 ` Stefan Monnier 2004-05-14 19:13 ` Luc Teirlinck 2004-05-14 21:02 ` Richard Stallman 2004-05-14 5:01 ` Luc Teirlinck 2004-05-14 23:00 ` Kim F. Storm 2004-05-15 0:44 ` Luc Teirlinck 2004-05-15 1:39 ` Luc Teirlinck 2004-05-15 18:34 ` Richard Stallman 2004-05-15 20:44 ` Luc Teirlinck 2004-05-15 23:44 ` Luc Teirlinck 2004-05-16 0:41 ` Luc Teirlinck 2004-05-16 13:52 ` Andreas Schwab 2004-05-17 11:04 ` Richard Stallman 2004-05-17 14:20 ` Luc Teirlinck 2004-05-16 5:58 ` Eli Zaretskii 2004-05-16 18:11 ` Luc Teirlinck 2004-05-16 18:32 ` Luc Teirlinck 2004-05-16 20:04 ` Luc Teirlinck 2004-05-16 22:41 ` Kim F. Storm 2004-05-17 5:21 ` Kai Grossjohann 2004-05-17 12:45 ` Kim F. Storm 2004-05-17 15:03 ` Luc Teirlinck 2004-05-17 15:22 ` Kim F. Storm 2004-05-18 16:25 ` Stefan Monnier 2004-05-18 17:10 ` Luc Teirlinck 2004-05-21 23:44 ` Kim F. Storm 2004-05-22 1:08 ` Luc Teirlinck 2004-05-22 11:52 ` Kim F. Storm 2004-05-23 17:21 ` Michael Albinus 2004-05-17 6:04 ` Eli Zaretskii 2004-05-15 2:50 ` Luc Teirlinck 2004-05-15 13:19 ` Andreas Schwab 2004-05-15 13:34 ` Luc Teirlinck 2004-05-15 16:45 ` Andreas Schwab 2004-05-15 17:49 ` Luc Teirlinck 2004-05-15 13:51 ` Luc Teirlinck 2004-05-15 18:26 ` Eli Zaretskii 2004-05-15 3:23 ` Luc Teirlinck 2004-05-15 18:02 ` Luc Teirlinck 2004-05-14 21:02 ` Richard Stallman 2004-05-14 2:31 ` Luc Teirlinck 2004-05-14 5:32 ` Luc Teirlinck 2004-05-14 11:36 ` Kai Grossjohann 2004-05-14 12:06 ` David Kastrup 2004-05-14 17:06 ` Stefan Monnier 2004-05-14 17:54 ` David Kastrup 2004-05-14 18:30 ` Stefan Monnier 2004-05-14 19:08 ` Kim F. Storm 2004-05-14 19:26 ` David Kastrup 2004-05-14 20:33 ` Kim F. Storm 2004-05-14 21:00 ` David Kastrup 2004-05-14 21:19 ` Kim F. Storm 2004-05-14 21:33 ` Stefan Monnier 2004-05-14 22:55 ` Kim F. Storm 2004-05-14 23:04 ` Stefan Monnier 2004-05-15 18:33 ` Richard Stallman 2004-05-14 22:11 ` David Kastrup 2004-05-14 22:57 ` Kim F. Storm 2004-05-14 22:47 ` Luc Teirlinck 2004-05-14 23:14 ` Kim F. Storm 2004-05-14 23:38 ` Luc Teirlinck 2004-05-14 22:50 ` Luc Teirlinck 2004-05-14 23:00 ` Luc Teirlinck 2004-05-14 20:40 ` Kai Grossjohann 2004-05-14 23:26 ` David Kastrup 2004-05-15 16:19 ` Kai Grossjohann 2004-05-15 17:01 ` David Kastrup 2004-05-15 17:26 ` Kai Grossjohann 2004-05-15 18:18 ` David Kastrup 2004-05-16 14:11 ` Kai Grossjohann 2004-05-15 18:33 ` Richard Stallman 2004-05-16 14:13 ` Kai Grossjohann 2004-05-17 1:14 ` Luc Teirlinck 2004-05-17 22:58 ` Richard Stallman 2004-05-18 3:44 ` Luc Teirlinck 2004-05-14 20:32 ` Kai Grossjohann 2004-05-14 21:35 ` Michael Albinus 2004-05-15 16:22 ` Kai Grossjohann 2004-05-14 20:29 ` Kai Grossjohann 2004-05-14 21:02 ` Richard Stallman 2004-05-14 0:54 ` Luc Teirlinck 2004-05-14 2:13 ` Luc Teirlinck
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).