Subject: 25.0.50; spinning in readable_events -- bad loop boundary check

From: Ken Raeburn <[email-masked]>
Date: Mon, 16 Nov 2015 16:01:00 -0500

This weekend, after leaving Emacs untouched for 2-3 days, but with
various activities like auto-revert checks and emacs-jabber running, I
found it unresponsive to emacsclient, and then noticed it was at 100%
CPU utilization.  I poked around with gdb a bit and found that it was in
the do-while loop near the top of readable_events.

All entries in the kbd_buffer array have type BUFFER_SWITCH_EVENT;
"flags" should have READABLE_EVENTS_FILTER_EVENTS set.  Given that
combination, the "return 1" in the loop should never be reached.

The adjustment of "event" at the end of the loop causes it to never
point past the end of the array; when it gets there, it's updated to
point to the first element.  However, kbd_store_ptr currently points
just past the end of the array, so the "while" condition is never false.

So we never break out of the loop.

It should be a simple fix.  I've got to do some real work at the
moment, but I'll try to get to this soon.  Documenting it in the
meantime, just in case.

(gdb) bt full
#0  readable_events (flags=<optimized out>) at ../../src/keyboard.c:3338
        event = 0xb63d88
#1  0x00000000004e9a25 in get_input_pending (flags=2) at ../../src/keyboard.c:6698
No locals.
#2  0x00000000004e9ad4 in Finput_pending_p (check_timers=<optimized out>) at ../../src/keyboard.c:9875
No locals.
#3  Finput_pending_p (check_timers=<optimized out>) at ../../src/keyboard.c:9859
No locals.
#4  0x0000000000557a50 in Ffuncall (nargs=<optimized out>, args=0x7fffffffcf18) at ../../src/eval.c:2650
        internal_argbuf = {0, 0, 0, 140737488343136, 0, 5627312, 0, 5629407}
        fun = 8655677
        original_fun = <optimized out>
        funcar = 2
        numargs = <optimized out>
        val = <optimized out>
        internal_args = 0x7fffffffce70
        count = 13
#5  0x000000000058c1bd in exec_byte_code (bytestr=0, vector=11811648, maxdepth=11943304, args_template=100, nargs=1, args=0x101010101010101) at ../../src/bytecode.c:880
        targets = {0x58c24e, 0x58c780, 0x58c78a, 0x58c785, 0x58c02a, 0x58c030, 0x58c2c6, 0x58c345, 0x58c33b, 0x58c340, 0x58c30c, 0x58c311, 0x58c06d, 0x58c070, 0x58c479, 0x58c316, 0x58c620, 0x58c625, 0x58c62a, 0x58c635, 0x58c0dc, 0x58c0e0, 0x58c688, 0x58c580, 0x58c44a, 0x58c44f, 0x58c454, 0x58c459, 0x58c151, 0x58c158, 0x58c674, 0x58c425, 0x58c40d, 0x58c412, 0x58c417, 0x58c3e3, 0x58c197, 0x58c1a0, 0x58c465, 0x58c3e8, 0x58e3a2, 0x58e3a7, 0x58e3ac, 0x58e3b5, 0x58c1e0, 0x58c1e0, 0x58d81d, 0x58e37d, 0x58e0c0, 0x58e0b5, 0x58df90, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58d70b, 0x58d7a8, 0x58d7e3, 0x58de2a, 0x58de64, 0x58c53b, 0x58c5a5, 0x58dea9, 0x58c500, 0x58c5e5, 0x58dedd, 0x58dc3b, 0x58dc6a, 0x58dcaa, 0x58dce7, 0x58dd74, 0x58dda3, 0x58dde3, 0x58d831, 0x58d860, 0x58d88f, 0x58d8cf, 0x58d90f, 0x58d94f, 0x58d996, 0x58d9d3, 0x58da10, 0x58da9d, 0x58dae1, 0x58db21, 0x58dbf6, 0x58db6c, 0x58dbb1, 0x58cdb2, 0x58d4aa, 0x58d42e, 0x58d46d, 0x58d33a, 0x58d377, 0x58d3b4, 0x58d195, 0x58c220, 0x58d1d7, 0x58d206, 0x58d287, 0x58d2c9, 0x58d30b, 0x58cdf7, 0x58ce2c, 0x58ce5d, 0x58ce96, 0x58c24e, 0x58cec9, 0x58cefe, 0x58cf33, 0x58cf68, 0x58cf9d, 0x58cfd2, 0x58c220, 0x58c24e, 0x58d001, 0x58d048, 0x58d077, 0x58d0a6, 0x58d0e6, 0x58d126, 0x58c979, 0x58ca6f, 0x58caaf, 0x58caef, 0x58cb2f, 0x58cb64, 0x58c24e, 0x58e1e8, 0x58e23c, 0x58c48d, 0x58e2ca, 0x58e469, 0x58e5d5, 0x58d65a, 0x58e1c7, 0x58c645, 0x58c298, 0x58c69c, 0x58df1d, 0x58df4b, 0x58e0ee, 0x58e13b, 0x58e17f, 0x58d6ad, 0x58e3c5, 0x58cb93, 0x58cbd7, 0x58cc06, 0x58cc35, 0x58cc64, 0x58cc93, 0x58ccd3, 0x58cd13, 0x58cd53, 0x58cd93, 0x58c795, 0x58c7d5, 0x58c815, 0x58c844, 0x58c884, 0x58c8c4, 0x58c900, 0x58c93c, 0x58d3f1, 0x58d155, 0x58c6fe, 0x58c746, 0x58c24e, 0x58e3ee, 0x58e67f, 0x58e4d9, 0x58e572, 0x58d5c8, 0x58dd24, 0x58da4d, 0x58d237, 0x58c39e, 0x58d4e7, 0x58c24e, 0x58c24e, 0x58d542, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58d58d <repeats 64 times>}
        count = 12
        stack = {
          pc = 0x1e2d071 "\204\252", 
          byte_string = 28413508, 
          byte_string_start = 0x1e2d010 "\bT\020\306 \307\310\311\312\313\005!\314\"\315$\216\t\203\032", 
          next = 0x7fffffffd260
        }
        result = 2
        type = 8
#6  0x00000000005577b4 in Ffuncall (nargs=<optimized out>, args=0x7fffffffd1e0) at ../../src/eval.c:2711
        fun = <optimized out>
        original_fun = 19090096
        funcar = 2
        numargs = <optimized out>
        val = <optimized out>
        internal_args = <optimized out>
        count = 11
#7  0x000000000055884d in Fapply (nargs=2, args=0x7fffffffd1e0) at ../../src/eval.c:2231
        i = <optimized out>
        numargs = <optimized out>
        funcall_nargs = <optimized out>
        funcall_args = 0x0
        spread_arg = 0
        fun = 19090096
        retval = <optimized out>
        sa_avail = 16384
        sa_must_free = false
#8  0x00000000005578b2 in Ffuncall (nargs=<optimized out>, args=0x7fffffffd1d8) at ../../src/eval.c:2630
        fun = 11695261
        original_fun = 9456
        funcar = 2
        numargs = <optimized out>
        val = <optimized out>
        internal_args = <optimized out>
        count = 10
#9  0x000000000058c1bd in exec_byte_code (bytestr=0, vector=11811648, maxdepth=11943304, args_template=140737488343528, nargs=3, args=0x101010101010101) at ../../src/bytecode.c:880
        targets = {0x58c24e, 0x58c780, 0x58c78a, 0x58c785, 0x58c02a, 0x58c030, 0x58c2c6, 0x58c345, 0x58c33b, 0x58c340, 0x58c30c, 0x58c311, 0x58c06d, 0x58c070, 0x58c479, 0x58c316, 0x58c620, 0x58c625, 0x58c62a, 0x58c635, 0x58c0dc, 0x58c0e0, 0x58c688, 0x58c580, 0x58c44a, 0x58c44f, 0x58c454, 0x58c459, 0x58c151, 0x58c158, 0x58c674, 0x58c425, 0x58c40d, 0x58c412, 0x58c417, 0x58c3e3, 0x58c197, 0x58c1a0, 0x58c465, 0x58c3e8, 0x58e3a2, 0x58e3a7, 0x58e3ac, 0x58e3b5, 0x58c1e0, 0x58c1e0, 0x58d81d, 0x58e37d, 0x58e0c0, 0x58e0b5, 0x58df90, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58d70b, 0x58d7a8, 0x58d7e3, 0x58de2a, 0x58de64, 0x58c53b, 0x58c5a5, 0x58dea9, 0x58c500, 0x58c5e5, 0x58dedd, 0x58dc3b, 0x58dc6a, 0x58dcaa, 0x58dce7, 0x58dd74, 0x58dda3, 0x58dde3, 0x58d831, 0x58d860, 0x58d88f, 0x58d8cf, 0x58d90f, 0x58d94f, 0x58d996, 0x58d9d3, 0x58da10, 0x58da9d, 0x58dae1, 0x58db21, 0x58dbf6, 0x58db6c, 0x58dbb1, 0x58cdb2, 0x58d4aa, 0x58d42e, 0x58d46d, 0x58d33a, 0x58d377, 0x58d3b4, 0x58d195, 0x58c220, 0x58d1d7, 0x58d206, 0x58d287, 0x58d2c9, 0x58d30b, 0x58cdf7, 0x58ce2c, 0x58ce5d, 0x58ce96, 0x58c24e, 0x58cec9, 0x58cefe, 0x58cf33, 0x58cf68, 0x58cf9d, 0x58cfd2, 0x58c220, 0x58c24e, 0x58d001, 0x58d048, 0x58d077, 0x58d0a6, 0x58d0e6, 0x58d126, 0x58c979, 0x58ca6f, 0x58caaf, 0x58caef, 0x58cb2f, 0x58cb64, 0x58c24e, 0x58e1e8, 0x58e23c, 0x58c48d, 0x58e2ca, 0x58e469, 0x58e5d5, 0x58d65a, 0x58e1c7, 0x58c645, 0x58c298, 0x58c69c, 0x58df1d, 0x58df4b, 0x58e0ee, 0x58e13b, 0x58e17f, 0x58d6ad, 0x58e3c5, 0x58cb93, 0x58cbd7, 0x58cc06, 0x58cc35, 0x58cc64, 0x58cc93, 0x58ccd3, 0x58cd13, 0x58cd53, 0x58cd93, 0x58c795, 0x58c7d5, 0x58c815, 0x58c844, 0x58c884, 0x58c8c4, 0x58c900, 0x58c93c, 0x58d3f1, 0x58d155, 0x58c6fe, 0x58c746, 0x58c24e, 0x58e3ee, 0x58e67f, 0x58e4d9, 0x58e572, 0x58d5c8, 0x58dd24, 0x58da4d, 0x58d237, 0x58c39e, 0x58d4e7, 0x58c24e, 0x58c24e, 0x58d542, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58c24e, 0x58d58d <repeats 64 times>}
        count = 6
        stack = {
          pc = 0xa9b350 ")0\202\237", 
          byte_string = 10053332, 
          byte_string_start = 0xa9b2cf "\b\021\n\020\v\022\306\034\v\033\307\v!\206\026", 
          next = 0x0
        }
        result = 2
        type = CONDITION_CASE
#10 0x000000000055746a in funcall_lambda (fun=10053285, nargs=<optimized out>, arg_vector=0x7fffffffd3d8) at ../../src/eval.c:2876
        val = <optimized out>
        syms_left = 0
        next = 0
        lexenv = 0
        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
#11 0x00000000005577b4 in Ffuncall (nargs=<optimized out>, args=0x7fffffffd3d0) at ../../src/eval.c:2711
        fun = <optimized out>
        original_fun = 44976
        funcar = 2
        numargs = <optimized out>
        val = <optimized out>
        internal_args = <optimized out>
        count = 4
#12 0x0000000000557c0a in call1 (fn=<optimized out>, arg1=<optimized out>) at ../../src/eval.c:2509
No locals.
#13 0x00000000004e81ed in timer_check_2 (idle_timers=<optimized out>, timers=<optimized out>) at ../../src/keyboard.c:4408
        old_deactivate_mark = 0
        idle_timer_ripe = <optimized out>
        timer = <optimized out>
        timer_time = {
          tv_sec = 1447557651, 
          tv_nsec = 578159175
        }
        timer_difference = <optimized out>
        idle_timer_difference = <optimized out>
        ripe = <optimized out>
        idle_timer = <optimized out>
        idle_timer_time = {
          tv_sec = 201019408, 
          tv_nsec = 140737325745505
        }
        timer_ripe = <optimized out>
        now = {
          tv_sec = 0, 
          tv_nsec = 606352165
        }
        idleness_now = <optimized out>
        chosen_timer = <optimized out>
#14 timer_check () at ../../src/keyboard.c:4470
        nexttime = <optimized out>
        timers = 105088275
        idle_timers = 105088179
        tem = <optimized out>
#15 0x00000000005947e1 in wait_reading_process_output (time_limit=<optimized out>, nsecs=<optimized out>, read_kbd=<optimized out>, do_display=true, wait_for_cell=<optimized out>, wait_proc=<optimized out>, just_wait_proc=0) at ../../src/process.c:4611
        old_timers_run = 1338598
        old_buffer = 0xbd0d80
        old_window = 58933997
        process_skipped = false
        channel = <optimized out>
        nfds = <optimized out>
        Available = {
          fds_bits = {0 <repeats 16 times>}
        }
        Writeok = {
          fds_bits = {0 <repeats 16 times>}
        }
        check_write = <optimized out>
        check_delay = <optimized out>
        no_avail = <optimized out>
        xerrno = 11
        proc = <optimized out>
        timeout = {
          tv_sec = 29, 
          tv_nsec = 822930168
        }
        end_time = {
          tv_sec = 1447557681, 
          tv_nsec = 429276800
        }
        timer_delay = {
          tv_sec = 0, 
          tv_nsec = 148877016
        }
        got_output_end_time = {
          tv_sec = 1447557681, 
          tv_nsec = <optimized out>
        }
        wait = TIMEOUT
        got_some_output = 85
        now = {
          tv_sec = 1447557651, 
          tv_nsec = <optimized out>
        }
#16 0x000000000041c5aa in sit_for (timeout=<optimized out>, reading=true, display_option=<optimized out>) at ../../src/dispnew.c:5756
        sec = 30
        nsec = 0
        do_display = <optimized out>
#17 0x00000000004ee6d2 in read_char (commandflag=1, map=104777747, prev_event=0, used_mouse_menu=0x7fffffffe1ff, end_time=0x0) at ../../src/keyboard.c:2702
        tem0 = <optimized out>
        timeout = 30
        delay_level = <optimized out>
        buffer_size = <optimized out>
        c = 0
        local_getcjmp = {{
            __jmpbuf = {0, -3652804491282325823, 147176864, 70562112, 12389765, 0, 3652806128017891009, -3652805553712636223}, 
            __mask_was_saved = 0, 
            __saved_mask = {
              __val = {0, 0, 0, 105486435, 105486435, 105486432, 0, 4611686019484352512, 5649663, 20544720, 5650325, 165792, 0, 4611686018595160064, 4611686019484352512, 140737488346656}
            }
          }}
        save_jump = {{
            __jmpbuf = {0, 106470408, 2, 1, 459, 58976608, 58976608, 4553804}, 
            __mask_was_saved = 2, 
            __saved_mask = {
              __val = {0, 0, 106470408, 58976608, 61759928, 0, 4959320, 0, 0, 0, 0, 0, 216480896, 106470408, 6020526, 0}
            }
          }}
        tem = <optimized out>
        save = <optimized out>
        previous_echo_area_message = 0
        also_record = 0
        reread = false
        recorded = false
        polling_stopped_here = false
        orig_kboard = 0x8c5bda0
#18 0x00000000004ef6e1 in read_key_sequence (keybuf=0x7fffffffe260, prompt=0, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=<optimized out>, bufsize=30) at ../../src/keyboard.c:9030
        interrupted_kboard = 0x8c5bda0
        interrupted_frame = 0x434b140
        key = <optimized out>
        used_mouse_menu = false
        echo_local_start = 0
        last_real_key_start = 0
        keys_local_start = 0
        new_binding = <optimized out>
        t = 0
        echo_start = 0
        keys_start = 0
        current_binding = 104777747
        first_event = 0
        first_unbound = 31
        mock_input = 0
        fkey = {
          parent = 62239811, 
          map = 62239811, 
          start = 0, 
          end = 0
        }
        keytran = {
          parent = 12343875, 
          map = 12343875, 
          start = 0, 
          end = 0
        }
        indec = {
          parent = 62239843, 
          map = 62239843, 
          start = 0, 
          end = 0
        }
        shift_translated = false
        delayed_switch_frame = 0
        original_uppercase = 0
        original_uppercase_position = -1
        dummyflag = false
        starting_buffer = 0xbd0d80
        fake_prefixed_keys = 0
#19 0x00000000004f08f4 in command_loop_1 () at ../../src/keyboard.c:1348
        cmd = <optimized out>
        keybuf = {536870930, 394, 202, 136328819, 0, 8088352, 0, 0, 4611686018595160064, 4611686019484352512, 140737488348032, 35702467, 140737488347968, 23808, 0, 0, 140737488348736, 5602228, 156656, 35702467, 8667492, 23808, 140737488347968, 5138889, 45552, 35702467, 0, 5139159, 30928640, 0}
        i = <optimized out>
        prev_modiff = 16413
        prev_buffer = 0x350c0e0
#20 0x0000000000555e64 in internal_condition_case (bfun=0x4f0760 <command_loop_1>, handlers=<optimized out>, hfun=0x4e69f0 <cmd_error>) at ../../src/eval.c:1309
        val = <optimized out>
        c = 0xffffffffffffffc8
#21 0x00000000004e4ffc in command_loop_2 (ignore=<optimized out>) at ../../src/keyboard.c:1088
        val = 2
#22 0x0000000000555d78 in internal_catch (tag=<error reading variable: Cannot access memory at address 0xffffffffffffffd0>, func=0x4e4fe0 <command_loop_2>, arg=0) at ../../src/eval.c:1073
        val = <optimized out>
        c = 0xffffffffffffffc8
#23 0x00000000004e4f4c in command_loop () at ../../src/keyboard.c:1067
No locals.
#24 0x00000000004e65d6 in recursive_edit_1 () at ../../src/keyboard.c:673
        val = <optimized out>
#25 0x00000000004e6915 in Frecursive_edit () at ../../src/keyboard.c:744
        buffer = <optimized out>
#26 0x00000000004124c3 in main (argc=1, argv=0x7fffffffe648) at ../../src/emacs.c:1644
        dummy = 140737349306136
        stack_bottom_variable = 0 '\000'
        do_initial_setlocale = <optimized out>
        dumping = <optimized out>
        skip_args = 0
        rlim = {
          rlim_cur = 8720000, 
          rlim_max = 18446744073709551615
        }
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = 0x0

Lisp Backtrace:
"input-pending-p" (0xffffcf20)
"auto-revert-buffers" (0xffffd1e8)
"apply" (0xffffd1e0)
"timer-event-handler" (0xffffd3d8)
(gdb) fr 0
#0  readable_events (flags=<optimized out>) at ../../src/keyboard.c:3338
3338			  && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES)
(gdb) list
3333	#ifdef USE_TOOLKIT_SCROLL_BARS
3334			    (flags & READABLE_EVENTS_FILTER_EVENTS) &&
3335	#endif
3336			    event->kind == FOCUS_IN_EVENT)
3337	#ifdef USE_TOOLKIT_SCROLL_BARS
3338			  && !((flags & READABLE_EVENTS_IGNORE_SQUEEZABLES)
3339			       && (event->kind == SCROLL_BAR_CLICK_EVENT
3340				   || event->kind == HORIZONTAL_SCROLL_BAR_CLICK_EVENT)
3341			       && event->ie.part == scroll_bar_handle
3342			       && event->ie.modifiers == 0)
(gdb) p event
$1 = (union buffered_input_event *) 0xb63d88
(gdb) p &kbd_buffer
$2 = (union buffered_input_event (*)[4096]) 0xb43b40
(gdb) p &kbd_buffer[4096]
$3 = (union buffered_input_event *) 0xb7bb40
(gdb) p kbd_fetch_ptr
$4 = (union buffered_input_event *) 0xb7bb08
(gdb) p kbd_store_ptr
$5 = (union buffered_input_event * volatile) 0xb7bb40
(gdb) set print elements 4096
(gdb) p kbd_buffer
$6 = {{
    kind = BUFFER_SWITCH_EVENT, 
    ie = {
      kind = BUFFER_SWITCH_EVENT, 
      part = scroll_bar_nowhere, 
      code = 0, 
      modifiers = 0, 
      x = 0, 
      y = 0, 
      timestamp = 0, 
      frame_or_window = 0, 
      arg = 0
    }, 
    sie = {
      kind = BUFFER_SWITCH_EVENT, 
      dpyinfo = 0x0, 
      requestor = 0, 
      selection = 0, 
      target = 0, 
      property = 0, 
      time = 0
    }
  } <repeats 4096 times>}
(gdb) q

In GNU Emacs 25.0.50.14 (x86_64-unknown-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2015-10-13
Repository revision: 18b0eb7f1cc16fe33f89c74d2497a6fcb4b863fd
Windowing system distributor 'The X.Org Foundation', version 11.0.11103000
System Description:	Ubuntu 12.04.5 LTS

Configured using:
 'configure --prefix=/permabit/user/raeburn/dev/emacs/emacs/lx/Inst
 --with-x-toolkit=lucid'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG SOUND DBUS GSETTINGS NOTIFY ACL
LIBSELINUX GNUTLS FREETYPE XFT ZLIB TOOLKIT_SCROLL_BARS LUCID X11

Important settings:
  locale-coding-system: nil

Major mode: Lisp Interaction

Minor modes in effect:
  shell-dirtrack-mode: t
  rcirc-track-minor-mode: t
  diff-auto-refine-mode: t
  display-time-mode: t
  global-hi-lock-mode: t
  hi-lock-mode: t
  icomplete-mode: t
  desktop-save-mode: t
  global-edit-server-edit-mode: t
  jabber-activity-mode: t
  which-function-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
Setting up indent for shell type sh
Indentation variables are now local.
Indentation setup for shell type sh
Setting up indent for shell type sh
Indentation variables are now local.
Indentation setup for shell type sh
Note: file is write protected [4 times]
Wrote /permabit/user/raeburn/.emacs.d/.emacs.desktop.lock.just-testing.permabit.com
Desktop: 9 frames, 144 buffers restored, 5 failed to restore.
For information about GNU Emacs and the GNU system, type C-h C-a.

Load-path shadows:
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-muc-nick-completion hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-muc-nick-completion
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-modeline hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-modeline
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-screen hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-screen
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-socks5 hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-socks5
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-muc hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-muc
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-chatbuffer hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-chatbuffer
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-events hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-events
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-chatstates hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-chatstates
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/fsm hides /usr/share/emacs/site-lisp/emacs-jabber/fsm
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-widget hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-widget
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-si-client hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-si-client
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-sasl hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-sasl
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-ratpoison hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-ratpoison
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-time hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-time
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-logon hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-logon
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-browse hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-browse
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-ahc-presence hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-ahc-presence
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-roster hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-roster
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/srv hides /usr/share/emacs/site-lisp/emacs-jabber/srv
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-ft-client hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-ft-client
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-compose hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-compose
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-search hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-search
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-feature-neg hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-feature-neg
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-sawfish hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-sawfish
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-vcard hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-vcard
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-ft-server hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-ft-server
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-activity hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-activity
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-export hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-export
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-conn hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-conn
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-xml hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-xml
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber hides /usr/share/emacs/site-lisp/emacs-jabber/jabber
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-util hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-util
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-festival hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-festival
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-xmessage hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-xmessage
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-iq hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-iq
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-autoloads hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-autoloads
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-vcard-avatars hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-vcard-avatars
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-ft-common hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-ft-common
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-menu hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-menu
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-awesome hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-awesome
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-si-server hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-si-server
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-bookmarks hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-bookmarks
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-wmii hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-wmii
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-core hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-core
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-version hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-version
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-ourversion hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-ourversion
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-autoaway hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-autoaway
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-keymap hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-keymap
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-register hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-register
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-avatar hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-avatar
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-presence hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-presence
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-gmail hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-gmail
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-osd hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-osd
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-alert hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-alert
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-disco hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-disco
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-chat hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-chat
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-si-common hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-si-common
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-history hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-history
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-keepalive hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-keepalive
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-truncate hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-truncate
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-ahc hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-ahc
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-private hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-private
/permabit/user/raeburn/.emacs.d/elpa/jabber-20150627.1006/jabber-watch hides /usr/share/emacs/site-lisp/emacs-jabber/jabber-watch
~/permabit-emacs/objdump hides /permabit/user/raeburn/elisp/objdump/objdump
~/permabit-emacs/kr-pdoc hides /permabit/user/raeburn/elisp/kr-pdoc
/permabit/user/raeburn/.emacs.d/elpa/ssh-20120904.1342/ssh hides /permabit/user/raeburn/elisp/ssh
/permabit/user/raeburn/.emacs.d/elpa/edit-server-20141231.1358/edit-server hides /permabit/user/raeburn/elisp/edit-server
~/permabit-emacs/c-fns hides /permabit/user/raeburn/elisp/c-fns
/permabit/user/raeburn/elisp/objdump/loaddefs hides /permabit/user/raeburn/dev/emacs/emacs/lisp/loaddefs

Features:
(shadow sort mail-extr gnus-msg emacsbug sendmail add-log objdump
org-element org-rmail org-mhe org-irc org-info org-gnus org-docview
doc-view jka-compr org-bibtex bibtex org-bbdb org-w3m org org-macro
org-footnote org-pcomplete org-list org-faces org-entities noutline
outline org-version ob-emacs-lisp ob ob-tangle ob-ref ob-lob ob-table
ob-exp org-src ob-keys ob-comint ob-core ob-eval org-compat org-macs
org-loaddefs find-func cal-menu calendar cal-loaddefs autoconf
autoconf-mode make-mode image-mode systemtap-mode cc-awk cc-langs python
tramp-sh tramp tramp-compat tramp-loaddefs trampver shell warnings
pcomplete json sh-script smie executable face-remap autorevert
filenotify rcirc vc vc-dispatcher vc-git diff-mode easy-mmode hideshow
time hi-lock icomplete kr-stuff kr-hesiod hideshowvis desktop frameset
ses unsafep browse-url edit-server kr-gnus gnus-demon nntp gnus-art
mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group gnus-undo
gnus-start gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo
parse-time gnus-spec gnus-int gnus-range message rfc822 mml mml-sec
mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045
ietf-drums mailabbrev gmm-utils mailheader gnus-win gnus gnus-ems
nnheader mail-utils iso-transl kr-dbus kr-math cc-mode cc-fonts cc-guess
cc-menus cc-cmds jabber jabber-notifications notifications
jabber-libnotify dbus jabber-awesome jabber-osd jabber-wmii
jabber-xmessage jabber-festival jabber-sawfish jabber-ratpoison
jabber-tmux jabber-screen jabber-socks5 jabber-ft-server
jabber-si-server jabber-ft-client jabber-ft-common jabber-si-client
jabber-si-common jabber-feature-neg jabber-truncate jabber-time
jabber-autoaway jabber-vcard-avatars jabber-chatstates jabber-events
jabber-vcard jabber-avatar mailcap jabber-activity jabber-watch
jabber-modeline jabber-ahc-presence jabber-ahc jabber-version
jabber-ourversion jabber-muc-nick-completion hippie-exp jabber-browse
jabber-search jabber-register jabber-roster format-spec jabber-presence
jabber-muc jabber-bookmarks jabber-private jabber-muc-nick-coloring
hexrgb jabber-widget jabber-disco wid-edit jabber-chat jabber-history
jabber-chatbuffer jabber-alert jabber-iq jabber-core jabber-console
sgml-mode ewoc jabber-keymap jabber-sasl sasl sasl-anonymous sasl-login
sasl-plain fsm jabber-logon jabber-conn srv dns starttls tls gnutls
jabber-xml xml jabber-menu jabber-util auth-source cl-seq eieio byte-opt
bytecomp byte-compile cl-extra cconv eieio-core cl-macs gnus-util
mm-util help-fns help-mode mail-prsvr password-cache kr-autoloads
finder-inf ssh-autoloads info package epg-config idutils derived
thingatpt compile comint ansi-color ring cperl-mode easymenu which-func
imenu cc-styles cc-align cc-engine cc-vars p4 dired kr-message-timestamp
advice c-eldoc cl gv cc-defs cl-loaddefs pcase cl-lib timeclock
time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel x-win term/common-win x-dnd tool-bar dnd fontset
image regexp-opt fringe tabulated-list newcomment elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow timer select scroll-bar
mouse jit-lock font-lock syntax facemenu font-core frame 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 charscript case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote dbusbind inotify dynamic-setting
system-font-setting font-render-setting x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 705632 85679)
 (symbols 48 50606 0)
 (miscs 40 68234 1168)
 (strings 32 120065 15281)
 (string-bytes 1 3738730)
 (vectors 16 48099)
 (vector-slots 8 992647 34688)
 (floats 8 615 524)
 (intervals 56 41573 248)
 (buffers 976 157)
 (heap 1024 84116 7901))