unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
@ 2021-08-15  2:46 Matt Beshara
  2021-08-15  7:36 ` Eli Zaretskii
  0 siblings, 1 reply; 15+ messages in thread
From: Matt Beshara @ 2021-08-15  2:46 UTC (permalink / raw)
  To: 50061

From emacs -Q:
 1. M-x eww RET
 2. mfa.pw/brave-new-world.xml RET
 3. C-x h
 4. M-w
 5. C-x b *scratch* RET
 6. (require 'savehist) C-j
 7. (setq savehist-additional-variables '(kill-ring)) C-j
 8. (savehist-save) C-j
    At this point ‘savehist-save’ will work as intended, even with 
    the
    large amount of XML in the kill ring.
 9. C-x b *eww* RET
10. M-x nxml-mode RET
11. C-x h
12. M-w
13. C-x b *scratch* RET
14. (savehist-save) C-j
    Here is where Emacs hangs.  The Emacs process’s CPU usage goes 
    to
    100%, and it starts consuming greater and greater amounts of
    memory.

Here is the output I get from ‘bt all’ after attaching lldb to the
process while it is in this state:

* thread #1, queue = 'com.apple.main-thread', stop reason = signal 
  SIGSTOP
  * frame #0: 0x000000010b933725 
  Emacs`print_object(obj=0x0000000002f9a7f0, 
  printcharfun=0x0000000000000000, escapeflag=true) at 
  print.c:1901:37 [opt]
    frame #1: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa4ed93, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #2: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa4ed53, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #3: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa4f4f3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #4: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaaa823, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #5: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaaa7d3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #6: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaaa8f3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #7: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaaa663, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #8: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa89333, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #9: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaaa6a3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #10: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaaa443, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #11: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa70603, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #12: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaaa473, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #13: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa59273, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #14: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1ca942f63, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #15: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1ca942ef3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #16: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1ca942c43, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #17: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa12723, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #18: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa12313, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #19: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa12183, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #20: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa11653, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #21: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa181f3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #22: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa18153, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #23: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa14423, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #24: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa53053, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #25: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa9b8b3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #26: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caab7e93, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #27: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caab7ac3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #28: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caab7aa3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #29: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caab9103, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #30: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1cc1e7fb3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #31: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1cc1e7f83, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #32: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1cc1e8ae3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #33: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1cb8abd63, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #34: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1cc1df053, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #35: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1ca8da613, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #36: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa5da93, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #37: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa98253, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #38: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caa9b913, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #39: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caab7d63, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #40: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caab7c13, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #41: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caab7bd3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #42: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaa74f3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #43: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaa7003, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #44: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #45: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc4ac14d, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #46: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caabaac3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #47: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #48: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc42d8c5, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #49: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #50: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc437135, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #51: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #52: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc4933f5, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #53: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #54: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc493465, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #55: 0x000000010b9344a3 
    Emacs`print_object(obj=<unavailable>, 
    printcharfun=0x0000000000000000, escapeflag=true) at print.c:0 
    [opt]
    frame #56: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caac45e3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #57: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #58: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc4371a5, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #59: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #60: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc437215, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #61: 0x000000010b9344a3 
    Emacs`print_object(obj=<unavailable>, 
    printcharfun=0x0000000000000000, escapeflag=true) at print.c:0 
    [opt]
    frame #62: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaca233, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #63: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #64: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc4f93c5, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #65: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caac2063, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #66: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #67: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc42f57d, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #68: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #69: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc42f5ed, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #70: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caac70f3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #71: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #72: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc49629d, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #73: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #74: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc4963ed, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #75: 0x000000010b9344a3 
    Emacs`print_object(obj=<unavailable>, 
    printcharfun=0x0000000000000000, escapeflag=true) at print.c:0 
    [opt]
    frame #76: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caacdc13, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #77: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #78: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc4357d5, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #79: 0x000000010b9359e4 
    Emacs`print_vectorlike(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>, 
    buf=<unavailable>) at print.c:1807:6 [opt]
    frame #80: 0x000000010b933900 
    Emacs`print_object(obj=0x00007fe1cc4969ed, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2218:11 [opt]
    frame #81: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caaccee3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #82: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1cc46f443, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #83: 0x000000010b97a9b4 
    Emacs`traverse_intervals(tree=0x00007fe1ca85dad8, 
    position=2115, function=(Emacs`print_interval at 
    print.c:2247), arg=0x0000000000000000) at intervals.c:257:7 
    [opt]
    frame #84: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca85d9f8, 
    position=2063, function=(Emacs`print_interval at 
    print.c:2247), arg=0x0000000000000000) at intervals.c:254:7 
    [opt]
    frame #85: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca8ab780, 
    position=2063, function=(Emacs`print_interval at 
    print.c:2247), arg=0x0000000000000000) at intervals.c:254:7 
    [opt]
    frame #86: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca8ab4e0, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #87: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca961270, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #88: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca961030, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #89: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca960ee0, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #90: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1caa552a0, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #91: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1caa54dc0, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #92: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1caa61e30, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #93: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca8fde00, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #94: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1cabb8600, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #95: 0x000000010b97a987 
    Emacs`traverse_intervals(tree=0x00007fe1ca8e7b50, position=0, 
    function=(Emacs`print_interval at print.c:2247), 
    arg=0x0000000000000000) at intervals.c:254:7 [opt]
    frame #96: 0x000000010b9343f2 
    Emacs`print_object(obj=<unavailable>, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2063:8 [opt]
    frame #97: 0x000000010b933c63 
    Emacs`print_object(obj=0x00007fe1caac65f3, 
    printcharfun=0x0000000000000000, escapeflag=true) at 
    print.c:2192:8 [opt]
    frame #98: 0x000000010b9309e0 Emacs`print(obj=<unavailable>, 
    printcharfun=<unavailable>, escapeflag=<unavailable>) at 
    print.c:650:3 [opt] [artificial]
    frame #99: 0x000000010b93073b 
    Emacs`Fprin1(object=0x00007fe1caac65f3, 
    printcharfun=<unavailable>) at print.c:651:3 [opt]
    frame #100: 0x000000010b911871 
    Emacs`funcall_subr(subr=0x000000010ba4a018, numargs=2, 
    args=<unavailable>) at eval.c:3128:19 [opt]
    frame #101: 0x000000010b910e5f 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:3051:11 [opt]
    frame #102: 0x000000015543b2ab 
    savehist-b722b772-6be6c4f8.eln`F73617665686973742d7072696e7461626c65_savehist_printable_0 
    + 603
    frame #103: 0x000000010b91187d 
    Emacs`funcall_subr(subr=0x00007fe1cc4bb288, numargs=1, 
    args=<unavailable>) at eval.c:3126:19 [opt]
    frame #104: 0x000000010b910e5f 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:3051:11 [opt]
    frame #105: 0x000000015543a5fb 
    savehist-b722b772-6be6c4f8.eln`F73617665686973742d73617665_savehist_save_0 
    + 987
    frame #106: 0x000000010b90c59b 
    Emacs`eval_sub(form=<unavailable>) at eval.c:0 [opt]
    frame #107: 0x000000010b90ca0d 
    Emacs`Fprogn(body=0x0000000000000000) at eval.c:471:13 [opt]
    frame #108: 0x000000010b90c5b2 
    Emacs`eval_sub(form=<unavailable>) at eval.c:0 [opt]
    frame #109: 0x000000010b9103ca 
    Emacs`Feval(form=0x00007fe1cb9a0283, lexical=<unavailable>) at 
    eval.c:2355:28 [opt]
    frame #110: 0x000000010b911871 
    Emacs`funcall_subr(subr=0x000000010ba46b98, numargs=2, 
    args=<unavailable>) at eval.c:3128:19 [opt]
    frame #111: 0x000000010b910e5f 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:3051:11 [opt]
    frame #112: 0x000000010b9571e2 
    Emacs`exec_byte_code(bytestr=<unavailable>, 
    vector=0x000000010eb5299d, maxdepth=<unavailable>, 
    args_template=<unavailable>, nargs=1, args=<unavailable>) at 
    bytecode.c:632:12 [opt]
    frame #113: 0x000000010b910def 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:0:4 [opt]
    frame #114: 0x000000010b9571e2 
    Emacs`exec_byte_code(bytestr=<unavailable>, 
    vector=0x000000010eb5290d, maxdepth=<unavailable>, 
    args_template=<unavailable>, nargs=1, args=<unavailable>) at 
    bytecode.c:632:12 [opt]
    frame #115: 0x000000010b910def 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:0:4 [opt]
    frame #116: 0x000000010b9571e2 
    Emacs`exec_byte_code(bytestr=<unavailable>, 
    vector=0x000000010eb5287d, maxdepth=<unavailable>, 
    args_template=<unavailable>, nargs=1, args=<unavailable>) at 
    bytecode.c:632:12 [opt]
    frame #117: 0x000000010b910def 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:0:4 [opt]
    frame #118: 0x000000010b9099b9 
    Emacs`Ffuncall_interactively(nargs=<unavailable>, 
    args=<unavailable>) at callint.c:260:32 [opt]
    frame #119: 0x000000010b910e5f 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:3051:11 [opt]
    frame #120: 0x000000010b90afa3 
    Emacs`Fcall_interactively(function=0x0000000002ced1b0, 
    record_flag=0x0000000000000000, keys=0x00007fe1cc498895) at 
    callint.c:791:21 [opt]
    frame #121: 0x000000010b911891 
    Emacs`funcall_subr(subr=0x000000010ba461e8, numargs=3, 
    args=<unavailable>) at eval.c:3131:19 [opt]
    frame #122: 0x000000010b910e5f 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:3051:11 [opt]
    frame #123: 0x000000010b9571e2 
    Emacs`exec_byte_code(bytestr=<unavailable>, 
    vector=0x000000010e964cfd, maxdepth=<unavailable>, 
    args_template=<unavailable>, nargs=1, args=<unavailable>) at 
    bytecode.c:632:12 [opt]
    frame #124: 0x000000010b910def 
    Emacs`Ffuncall(nargs=<unavailable>, args=<unavailable>) at 
    eval.c:0:4 [opt]
    frame #125: 0x000000010b9114cc Emacs`call1(fn=<unavailable>, 
    arg1=<unavailable>) at eval.c:2911:10 [opt]
    frame #126: 0x000000010b88506e Emacs`command_loop_1 at 
    keyboard.c:1489:13 [opt]
    frame #127: 0x000000010b90ede7 
    Emacs`internal_condition_case(bfun=(Emacs`command_loop_1 at 
    keyboard.c:1262), handlers=0x0000000000000090, 
    hfun=(Emacs`cmd_error at keyboard.c:925)) at eval.c:1478:25 
    [opt]
    frame #128: 0x000000010b88489e 
    Emacs`command_loop_2(handlers=0x0000000000000090) at 
    keyboard.c:1117:11 [opt]
    frame #129: 0x000000010b90e3fe 
    Emacs`internal_catch(tag=0x000000000000de60, 
    func=<unavailable>, arg=<unavailable>) at eval.c:1198:25 [opt]
    frame #130: 0x000000010b9e0b78 Emacs`command_loop.cold.1 + 72
    frame #131: 0x000000010b884166 Emacs`command_loop at 
    keyboard.c:1092:5 [opt]
    frame #132: 0x000000010b884076 Emacs`recursive_edit_1 at 
    keyboard.c:720:9 [opt]
    frame #133: 0x000000010b8842eb Emacs`Frecursive_edit at 
    keyboard.c:792:3 [opt]
    frame #134: 0x000000010b882e7c Emacs`main(argc=<unavailable>, 
    argv=0x00007ffee4451928) at emacs.c:2310:3 [opt]
    frame #135: 0x00007fff5efd43d5 libdyld.dylib`start + 1
    frame #136: 0x00007fff5efd43d5 libdyld.dylib`start + 1
  thread #3, name = 'gmain'
    frame #0: 0x00007fff5f11136a libsystem_kernel.dylib`poll + 10
    frame #1: 0x000000010d84c9f6 
    libglib-2.0.0.dylib`g_main_context_iterate + 422
    frame #2: 0x000000010d84cb06 
    libglib-2.0.0.dylib`g_main_context_iteration + 102
    frame #3: 0x000000010d84eb86 
    libglib-2.0.0.dylib`glib_worker_main + 54
    frame #4: 0x000000010d87aec2 
    libglib-2.0.0.dylib`g_thread_proxy + 66
    frame #5: 0x00007fff5f1c82eb 
    libsystem_pthread.dylib`_pthread_body + 126
    frame #6: 0x00007fff5f1cb249 
    libsystem_pthread.dylib`_pthread_start + 66
    frame #7: 0x00007fff5f1c740d 
    libsystem_pthread.dylib`thread_start + 13
  thread #5
    frame #0: 0x00007fff5f110616 libsystem_kernel.dylib`__select + 
    10
    frame #1: 0x000000010b9a74c2 Emacs`-[EmacsApp 
    fd_handler:](self=<unavailable>, _cmd=<unavailable>, 
    unused=<unavailable>) at nsterm.m:5872:20 [opt]
    frame #2: 0x00007fff3524d9a2 Foundation`__NSThread__start__ + 
    1194
    frame #3: 0x00007fff5f1c82eb 
    libsystem_pthread.dylib`_pthread_body + 126
    frame #4: 0x00007fff5f1cb249 
    libsystem_pthread.dylib`_pthread_start + 66
    frame #5: 0x00007fff5f1c740d 
    libsystem_pthread.dylib`thread_start + 13
  thread #8, name = 'com.apple.NSEventThread'
    frame #0: 0x00007fff5f10921a 
    libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x00007fff5f109768 libsystem_kernel.dylib`mach_msg + 
    60
    frame #2: 0x00007fff32feee0e 
    CoreFoundation`__CFRunLoopServiceMachPort + 328
    frame #3: 0x00007fff32fee37c CoreFoundation`__CFRunLoopRun + 
    1612
    frame #4: 0x00007fff32fedade 
    CoreFoundation`CFRunLoopRunSpecific + 455
    frame #5: 0x00007fff305eb4a2 AppKit`_NSEventThread + 175
    frame #6: 0x00007fff5f1c82eb 
    libsystem_pthread.dylib`_pthread_body + 126
    frame #7: 0x00007fff5f1cb249 
    libsystem_pthread.dylib`_pthread_start + 66
    frame #8: 0x00007fff5f1c740d 
    libsystem_pthread.dylib`thread_start + 13
  thread #81
    frame #0: 0x00007fff5f1c73f0 
    libsystem_pthread.dylib`start_wqthread
  thread #86
    frame #0: 0x0000000000000000


In GNU Emacs 28.0.50 (build 4, x86_64-apple-darwin18.7.0, NS 
appkit-1671.60 Version 10.14.6 (Build 18G9216))
 of 2021-08-15 built on Dhamma.local
Repository revision: 31ab12e26168c272b291fe91c009cc53b3e55492
Repository branch: master
Windowing system distributor 'Apple', version 10.3.1671
System Description:  Mac OS X 10.14.6

Configured using:
 'configure --with-sound=no --with-x-toolkit=no --with-json
 --without-compress-install --with-native-compilation'
Configured features:
ACL DBUS GIF GLIB GMP GNUTLS JPEG JSON LCMS2 LIBXML2 MODULES 
NATIVE_COMP
NOTIFY KQUEUE NS PDUMPER PNG RSVG THREADS TIFF TOOLKIT_SCROLL_BARS 
XIM
ZLIB
Important settings:
  value of $LANG: en_AU.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Info

Minor modes in effect:
  windmove-mode: t
  which-key-mode: t
  vertico-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  display-time-mode: t
  pdf-occur-global-minor-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  ace-window-display-mode: t
  save-place-mode: t
  savehist-mode: t
  show-paren-mode: t
  recentf-mode: t
  minibuffer-depth-indicate-mode: t
  marginalia-mode: t
  isearch-mb-mode: t
  flyspell-lazy-mode: t
  electric-pair-mode: t
  diredfl-global-mode: t
  diff-hl-flydiff-mode: t
  global-diff-hl-mode: t
  global-aggressive-indent-mode: t
  global-so-long-mode: t
  global-display-line-numbers-mode: t
  delete-selection-mode: t
  global-auto-revert-mode: t
  shell-dirtrack-mode: t
  auto-compile-on-load-mode: t
  auto-compile-on-save-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-quote-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tab-bar-history-mode: t
  tab-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  window-divider-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/Users/matt/.emacs.d/elpa/magit-20210806.2014/magit-section-pkg 
hides 
/Users/matt/.emacs.d/elpa/magit-section-20210806.1607/magit-section-pkg
/Users/matt/.emacs.d/elpa/password-store-20200328.1214/password-store 
hides /usr/local/share/emacs/site-lisp/pass/password-store
/Users/matt/.emacs.d/elpa/transient-20210723.1601/transient hides 
/Applications/Emacs.app/Contents/Resources/lisp/transient

Features:
(shadow epa-file emacsbug em-unix em-term em-script em-prompt 
em-ls
em-hist em-pred em-glob em-dirs esh-var em-cmpl em-basic em-banner
em-alias esh-mode network-stream url-cache magit-extras tabify 
help-fns
radix-tree cl-print misearch multi-isearch reposition tramp-cache
tramp-sh octave-expansions octave lua-mode ol-eww ol-rmail ol-mhe 
ol-irc
ol-info ol-gnus nnselect gnus-search eieio-opt speedbar ezimage 
dframe
ol-docview ol-bibtex bibtex ol-bbdb ol-w3m dired-aux bug-reference
pdf-sync pdf-annot pdf-outline pdf-links pdf-history rng-cmpct
modus-operandi-theme subword-mode-expansions cap-words superword 
subword
debbugs soap-client url-http url-auth url-gw rng-xsd xsd-regexp 
diminish
mfa-bind mfa-ztree ztree ztree-diff ztree-diff-model ztree-dir
ztree-view ztree-protocol ztree-util mfa-xref mfa-windmove 
windmove
mfa-whitespace whitespace mfa-which-key which-key mfa-wgrep 
mfa-vterm
mfa-vertico consult-vertico vertico mfa-vdiff-magit vdiff-magit
magit-ediff mfa-vdiff vdiff hydra lv mfa-undo-tree undo-tree 
mfa-tramp
tramp tramp-loaddefs trampver tramp-integration files-x 
tramp-compat
ls-lisp mfa-tab-bar time mfa-symbol-overlay symbol-overlay mfa-rg 
rg
rg-info-hack rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg wgrep
rg-history rg-header mfa-pdf-tools pdf-occur ibuf-ext tablist
tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local cedet pdf-isearch
let-alist pdf-misc pdf-tools pdf-view pdf-cache pdf-info pdf-util
pdf-macs mfa-password-store mfa-passmm passmm password-store
auth-source-pass mfa-mu4e mu4e mu4e-org mu4e-main mu4e-view
mu4e-view-gnus gnus-art mm-uu mml2015 mm-view mml-smime smime dig
gnus-sum gnus-group gnus-undo gnus-start gnus-dbus dbus gnus-cloud
nnimap nnmail mail-source utf7 netrc nnoo parse-time iso8601 
gnus-spec
gnus-int gnus-range gnus-win mu4e-view-common mu4e-headers 
mu4e-compose
mu4e-context mu4e-draft mu4e-actions rfc2368 mu4e-mark mu4e-proc
mu4e-utils mu4e-lists mu4e-message flow-fill hl-line mu4e-vars 
mu4e-meta
mfa-mpv mpv tq org-timer org-clock mfa-modus-themes modus-themes 
mfa-man
man mfa-magit magit-bookmark magit-submodule magit-obsolete 
magit-blame
magit-stash magit-reflog magit-bisect magit-push magit-pull 
magit-fetch
magit-clone magit-remote magit-commit magit-sequence magit-notes
magit-worktree magit-tag magit-merge magit-branch magit-reset
magit-files magit-refs magit-status magit magit-repos magit-apply
magit-wip magit-log magit-diff smerge-mode git-commit log-edit 
add-log
magit-core magit-autorevert magit-margin magit-transient 
magit-process
with-editor magit-mode transient magit-git magit-section benchmark
magit-utils which-func ido crm mfa-info mfa-exwm exwm-systemtray
xcb-systemtray xcb-xembed exwm-randr xcb-randr exwm exwm-input
xcb-keysyms exwm-manage exwm-floating xcb-cursor xcb-render 
exwm-layout
exwm-workspace exwm-core xcb-ewmh xcb-icccm xcb xcb-xkb xcb-xproto
xcb-types xcb-debug mfa-embark embark-consult embark mfa-elpher 
ffap
socks nsm elpher mfa-elfeed elfeed-show elfeed-search vc-mtn 
vc-bzr
vc-src vc-sccs vc-svn vc-cvs vc-rcs message rmc rfc822 mml mml-sec 
epa
epg epg-config mm-decode mm-bodies mm-encode mailabbrev gmm-utils
mailheader elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db 
elfeed-lib
xml-query mfa-eglot eglot array jsonrpc ert debug backtrace 
flymake-proc
flymake mfa-diacritics mfa-doc-view doc-view jka-compr image-mode 
exif
mfa-desktop desktop frameset mfa-dabbrev dabbrev mfa-consult
consult-xref consult mfa-calendar mfa-avy mfa-ace-window 
ace-window
mfa-ace-link ace-link avy saveplace savehist rotate re-builder
rainbow-delimiters rfc-mode pinentry paren foldout org-noter
prot-orderless orderless nxml-mode-expansions rng-nxml rng-valid 
rng-loc
rng-uri rng-parse nxml-parse rng-match rng-dt rng-util rng-pttrn 
nxml-ns
nxml-mode nxml-outln nxml-rap nxml-util nxml-enc xmltok nov 
recentf
tree-widget the-org-mode-expansions org-element avl-tree generator 
org
ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote
org-src ob-comint org-pcomplete org-list org-faces org-entities 
noutline
outline org-version ob-emacs-lisp ob-core ob-eval org-table ol 
org-keys
org-compat org-macs org-loaddefs format-spec cal-menu calendar
cal-loaddefs bookmark esxml-query multiple-cursors
mc-separate-operations rectangular-region-mode mc-mark-pop 
mc-edit-lines
mc-hide-unmatched-lines-mode mc-mark-more mc-cycle-cursors
multiple-cursors-core rect move-text mb-depth mhtml-mode
css-mode-expansions css-mode smie html-mode-expansions sgml-mode
marginalia js-mode-expansions js imenu cc-mode-expansions cc-mode
cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine 
cc-vars
cc-defs isearch-mb impatient-mode htmlize simple-httpd ibuffer
ibuffer-loaddefs hideshow grep gnutls form-feed flyspell-lazy
flyspell-correct flyspell ispell expand-region 
text-mode-expansions
er-basic-expansions expand-region-core expand-region-custom 
prot-eww
prot-pulse pulse prot-common eww xdg url-queue shr kinsoku svg xml 
dom
puny mm-url gnus nnheader gnus-util rmail rmail-loaddefs time-date
eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module
esh-groups esh-util enriched facemenu elec-pair ediff ediff-merg
ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util
dumb-jump popup s xref project display-fill-column-indicator 
diredfl
dired-subtree dired-narrow dired-hacks-utils dash dired-x
diff-hl-flydiff diff diff-hl vc-hg vc-git log-view pcvs-util 
vc-dir ewoc
vc vc-dispatcher diff-mode cus-edit pp cus-load wid-edit calc
calc-loaddefs calc-macs apropos aggressive-indent lisp-mnt 
mail-parse
rfc2231 so-long display-line-numbers delsel autorevert filenotify 
server
anaphora mfa nush nu advice cl nonsense smtpmail sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils regsearch 
thingatpt
aside-dired dired dired-loaddefs aside-context aside-vterm vterm 
derived
face-remap compile text-property-search color term disp-table 
shell
pcomplete ehelp comint ansi-color ring find-func vterm-module 
term/xterm
xterm aside-hook-functions aside edmacro kmacro info package 
browse-url
url url-proxy url-privacy url-expand url-methods url-history 
url-cookie
url-domsuf url-util mailcap url-handlers url-parse auth-source 
eieio
eieio-core eieio-loaddefs password-cache json map url-vars 
auto-compile
comp comp-cstr warnings subr-x rx cl-seq cl-extra help-mode 
easy-mmode
packed cl-macs pcase cl-loaddefs cl-lib seq byte-opt gv bytecomp
byte-compile cconv iso-transl tooltip eldoc electric uniquify 
ediff-hook
vc-hooks lisp-float-type mwheel term/ns-win ns-win ucs-normalize
mule-util term/common-win tool-bar dnd fontset image regexp-opt 
fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch 
easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer cl-generic cham georgian 
utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese 
eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic 
indian
cyrillic chinese composite charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice 
button
loaddefs faces cus-face macroexp files window text-properties 
overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads dbusbind kqueue cocoa 
ns
lcms2 multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 3345093 414274)
 (symbols 48 83859 2)
 (strings 32 286646 14922)
 (string-bytes 1 11335765)
 (vectors 16 118575)
 (vector-slots 8 2919333 305282)
 (floats 8 2527 858)
 (intervals 56 446349 1375)
 (buffers 992 130))





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15  2:46 bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer Matt Beshara
@ 2021-08-15  7:36 ` Eli Zaretskii
  2021-08-15  8:37   ` Eli Zaretskii
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2021-08-15  7:36 UTC (permalink / raw)
  To: Matt Beshara; +Cc: 50061

> From: Matt Beshara <m@mfa.pw>
> Date: Sun, 15 Aug 2021 12:46:09 +1000
> 
> >From emacs -Q:
>  1. M-x eww RET
>  2. mfa.pw/brave-new-world.xml RET
>  3. C-x h
>  4. M-w
>  5. C-x b *scratch* RET
>  6. (require 'savehist) C-j
>  7. (setq savehist-additional-variables '(kill-ring)) C-j
>  8. (savehist-save) C-j
>     At this point ‘savehist-save’ will work as intended, even with 
>     the
>     large amount of XML in the kill ring.
>  9. C-x b *eww* RET
> 10. M-x nxml-mode RET
> 11. C-x h
> 12. M-w
> 13. C-x b *scratch* RET
> 14. (savehist-save) C-j
>     Here is where Emacs hangs.  The Emacs process’s CPU usage goes 
>     to
>     100%, and it starts consuming greater and greater amounts of
>     memory.

nXML puts a lot of its private text properties on the text.  My guess
is that producing a printed representation for that consumes
inordinate amounts of memory.  For me, Emacs runs out of memory even
if I M-w only the initial chunk of the file that ends with "<p>Created
with abbyy2epub (v.1.7.6)</p></div>", and then do this in *scratch*:

  kill-ring C-x C-e





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15  7:36 ` Eli Zaretskii
@ 2021-08-15  8:37   ` Eli Zaretskii
  2021-08-15 10:38     ` Matt Beshara
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2021-08-15  8:37 UTC (permalink / raw)
  To: m; +Cc: 50061

> Date: Sun, 15 Aug 2021 10:36:35 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 50061@debbugs.gnu.org
> 
> nXML puts a lot of its private text properties on the text.  My guess
> is that producing a printed representation for that consumes
> inordinate amounts of memory.

Specifically, it's the 'rng-state' property on the "</p>" that ends a
paragraph.  It's a massive recursive data structure, and printing it
takes a lot of memory.  Maybe nXML could arrange for these properties
to be removed when copying to the kill-ring, but would it get in the
way if you want to paste into an XML buffer?





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15  8:37   ` Eli Zaretskii
@ 2021-08-15 10:38     ` Matt Beshara
  2021-08-15 11:25       ` Eli Zaretskii
  0 siblings, 1 reply; 15+ messages in thread
From: Matt Beshara @ 2021-08-15 10:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 50061


Eli Zaretskii <eliz@gnu.org> writes:

> Specifically, it's the 'rng-state' property on the "</p>" that 
> ends a
> paragraph.  It's a massive recursive data structure, and 
> printing it
> takes a lot of memory.  Maybe nXML could arrange for these 
> properties
> to be removed when copying to the kill-ring, but would it get in 
> the
> way if you want to paste into an XML buffer?

I haven’t had time to look at the code yet, so I’m not sure what 
information the ‘rng-state’ property contains, and whether it 
would cause any problems (to me) for it to be removed when copied. 
That said, personally, I don’t think there could be any side 
effect of removing that property from copied XML which would be 
more disruptive than savehist causing Emacs to hang completely 
when trying to save my kill ring.  Also, would nXML not be able to 
recreate any missing data it needed from the ‘rng-state’ property 
if the plain text of the XML was then pasted into an nXML buffer 
again?






^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 10:38     ` Matt Beshara
@ 2021-08-15 11:25       ` Eli Zaretskii
  2021-08-15 11:44         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2021-08-15 11:25 UTC (permalink / raw)
  To: Matt Beshara; +Cc: 50061

> From: Matt Beshara <m@mfa.pw>
> Cc: 50061@debbugs.gnu.org
> Date: Sun, 15 Aug 2021 20:38:04 +1000
> 
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Specifically, it's the 'rng-state' property on the "</p>" that 
> > ends a
> > paragraph.  It's a massive recursive data structure, and 
> > printing it
> > takes a lot of memory.  Maybe nXML could arrange for these 
> > properties
> > to be removed when copying to the kill-ring, but would it get in 
> > the
> > way if you want to paste into an XML buffer?
> 
> I haven’t had time to look at the code yet, so I’m not sure what 
> information the ‘rng-state’ property contains, and whether it 
> would cause any problems (to me) for it to be removed when copied. 
> That said, personally, I don’t think there could be any side 
> effect of removing that property from copied XML which would be 
> more disruptive than savehist causing Emacs to hang completely 
> when trying to save my kill ring.  Also, would nXML not be able to 
> recreate any missing data it needed from the ‘rng-state’ property 
> if the plain text of the XML was then pasted into an nXML buffer 
> again?

Sorry, I don't know enough about nXML to answer those questions.  But
I think patches to remove that property when copying stuff to the
kill-ring will be welcome.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 11:25       ` Eli Zaretskii
@ 2021-08-15 11:44         ` Lars Ingebrigtsen
  2021-08-15 11:46           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-15 11:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Matt Beshara, 50061

Eli Zaretskii <eliz@gnu.org> writes:

> Sorry, I don't know enough about nXML to answer those questions.  But
> I think patches to remove that property when copying stuff to the
> kill-ring will be welcome.

If I remember correctly from the last time I poked at `nxml-mode', those
properties should be recomputed automatically.

So I guess the mode could add those properties to
`yank-excluded-properties' buffer-locally and that should fix this issue?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 11:44         ` Lars Ingebrigtsen
@ 2021-08-15 11:46           ` Lars Ingebrigtsen
  2021-08-15 12:16             ` Andreas Schwab
  0 siblings, 1 reply; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-15 11:46 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Matt Beshara, 50061

Lars Ingebrigtsen <larsi@gnus.org> writes:

> So I guess the mode could add those properties to
> `yank-excluded-properties' buffer-locally and that should fix this issue?

Er, no, we want to inhibit those properties from even landing in the
kill ring?  So that doesn't help.  Do we have something in Emacs that
filters the text properties when copying to the kill ring?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 11:46           ` Lars Ingebrigtsen
@ 2021-08-15 12:16             ` Andreas Schwab
  2021-08-15 13:45               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 15+ messages in thread
From: Andreas Schwab @ 2021-08-15 12:16 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Matt Beshara, 50061

On Aug 15 2021, Lars Ingebrigtsen wrote:

> Do we have something in Emacs that
> filters the text properties when copying to the kill ring?

It is called filter-buffer-substring-function.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 12:16             ` Andreas Schwab
@ 2021-08-15 13:45               ` Lars Ingebrigtsen
  2021-08-15 14:07                 ` Eli Zaretskii
  2021-08-15 22:39                 ` Matt Beshara
  0 siblings, 2 replies; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-15 13:45 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Matt Beshara, 50061

Andreas Schwab <schwab@linux-m68k.org> writes:

> It is called filter-buffer-substring-function.

Ah, thanks.

I've now pushed a fix using this mechanism, and as far as I can tell, it
seems to work fine (and doesn't seem to lead to any regressions in
nxml-mode).

Matt, can you try updating and see whether this solves the problem for
you, too?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 13:45               ` Lars Ingebrigtsen
@ 2021-08-15 14:07                 ` Eli Zaretskii
  2021-08-15 14:23                   ` Lars Ingebrigtsen
  2021-08-15 22:39                 ` Matt Beshara
  1 sibling, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2021-08-15 14:07 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: m, schwab, 50061

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Matt Beshara <m@mfa.pw>,  Eli Zaretskii <eliz@gnu.org>,
>   50061@debbugs.gnu.org
> Date: Sun, 15 Aug 2021 15:45:13 +0200
> 
> Andreas Schwab <schwab@linux-m68k.org> writes:
> 
> > It is called filter-buffer-substring-function.
> 
> Ah, thanks.
> 
> I've now pushed a fix using this mechanism, and as far as I can tell, it
> seems to work fine (and doesn't seem to lead to any regressions in
> nxml-mode).

I see the filter you installed removes the fontified property as well?
Why is that? I don't think we do that anywhere else.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 14:07                 ` Eli Zaretskii
@ 2021-08-15 14:23                   ` Lars Ingebrigtsen
  2021-08-15 14:31                     ` Eli Zaretskii
  0 siblings, 1 reply; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-15 14:23 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: m, schwab, 50061

Eli Zaretskii <eliz@gnu.org> writes:

> I see the filter you installed removes the fontified property as well?
> Why is that? I don't think we do that anywhere else.

I thought I vaguely remembered nxml-mode using the font-lock machinery
for some of this stuff, so I wanted (when yanking stuff back into an
nxml-mode buffer) all of the data to be recomputed (if necessary).

But I may be misremembering -- if it's not using font-lock for this,
then removing `fontified' should be unnecessary. 

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 14:23                   ` Lars Ingebrigtsen
@ 2021-08-15 14:31                     ` Eli Zaretskii
  2021-08-16 11:17                       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2021-08-15 14:31 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: m, schwab, 50061

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: schwab@linux-m68k.org,  m@mfa.pw,  50061@debbugs.gnu.org
> Date: Sun, 15 Aug 2021 16:23:54 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I see the filter you installed removes the fontified property as well?
> > Why is that? I don't think we do that anywhere else.
> 
> I thought I vaguely remembered nxml-mode using the font-lock machinery
> for some of this stuff, so I wanted (when yanking stuff back into an
> nxml-mode buffer) all of the data to be recomputed (if necessary).
> 
> But I may be misremembering -- if it's not using font-lock for this,
> then removing `fontified' should be unnecessary. 

I think we shouldn't remove that property, because it's unnecessary,
and because filter-buffer-substring-function is used not only for
copying text into the kill-ring.  We should leave there properties
that cause no trouble.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 13:45               ` Lars Ingebrigtsen
  2021-08-15 14:07                 ` Eli Zaretskii
@ 2021-08-15 22:39                 ` Matt Beshara
  2021-08-16 11:17                   ` Lars Ingebrigtsen
  1 sibling, 1 reply; 15+ messages in thread
From: Matt Beshara @ 2021-08-15 22:39 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 50061


Lars Ingebrigtsen <larsi@gnus.org> writes:

> Matt, can you try updating and see whether this solves the 
> problem for
> you, too?

Works like a charm.  Thanks for your help!





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 14:31                     ` Eli Zaretskii
@ 2021-08-16 11:17                       ` Lars Ingebrigtsen
  0 siblings, 0 replies; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-16 11:17 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: m, schwab, 50061

Eli Zaretskii <eliz@gnu.org> writes:

> I think we shouldn't remove that property, because it's unnecessary,
> and because filter-buffer-substring-function is used not only for
> copying text into the kill-ring.  We should leave there properties
> that cause no trouble.

OK; removed the removal.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer
  2021-08-15 22:39                 ` Matt Beshara
@ 2021-08-16 11:17                   ` Lars Ingebrigtsen
  0 siblings, 0 replies; 15+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-16 11:17 UTC (permalink / raw)
  To: Matt Beshara; +Cc: 50061

Matt Beshara <m@mfa.pw> writes:

> Lars Ingebrigtsen <larsi@gnus.org> writes:
>
>> Matt, can you try updating and see whether this solves the problem
>> for
>> you, too?
>
> Works like a charm.  Thanks for your help!

Thanks for checking; I'm closing this bug report, then.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2021-08-16 11:17 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-15  2:46 bug#50061: 28.0.50; Hang caused by savehist-save when saving kill ring with large amount of data from nxml-mode buffer Matt Beshara
2021-08-15  7:36 ` Eli Zaretskii
2021-08-15  8:37   ` Eli Zaretskii
2021-08-15 10:38     ` Matt Beshara
2021-08-15 11:25       ` Eli Zaretskii
2021-08-15 11:44         ` Lars Ingebrigtsen
2021-08-15 11:46           ` Lars Ingebrigtsen
2021-08-15 12:16             ` Andreas Schwab
2021-08-15 13:45               ` Lars Ingebrigtsen
2021-08-15 14:07                 ` Eli Zaretskii
2021-08-15 14:23                   ` Lars Ingebrigtsen
2021-08-15 14:31                     ` Eli Zaretskii
2021-08-16 11:17                       ` Lars Ingebrigtsen
2021-08-15 22:39                 ` Matt Beshara
2021-08-16 11:17                   ` Lars Ingebrigtsen

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).