1. 23 Jan, 2013 1 commit
    • Stefan Monnier's avatar
      * src/xdisp.c (message2, message2_nolog): Remove functions. · b09cca6a
      Stefan Monnier authored
      (message3, message3_nolog): Extract nbytes and multibyteness directly
      from the string.  Change all callers.
      (message3_nolog): Don't set message_enable_multibyte since set_message
      will reset it anyway.
      (message1, message1_nolog): Use message3.
      (vmessage): Use a stack allocated buffer rather than f->message_buf.
      (with_echo_area_buffer): Remove last two arguments.  Update all callers.
      (set_message): Drop all but the second arg, which has to be a string.
      (set_message_1): Simplify now that we know that a1 is NULL and the
      second arg is a string.
      * src/frame.h (struct frame): Remove `message_buf' field.
      Use glyphs_initialized_p instead.
      (FRAME_MESSAGE_BUF): Remove macro.
      * src/w16select.c (Fw16_set_clipboard_data): Prefer message3 to message2.
      * src/lisp.h (message2, message2_nolog): Remove declarations.
      (message3, message3_nolog): Update declarations.
      * src/keyboard.c (read_char_minibuf_menu_text)
      (read_char_minibuf_menu_width): Remove vars.
      (read_char_minibuf_menu_prompt): Rewrite the menu's construction so as
      to correctly handle multibyte strings.
      * src/frame.c (delete_frame): Don't free message_buf any more.
      * src/editfns.c (message_text, message_length): Remove vars.
      (Fmessage_box): Don't copy the Lisp string's bytes any longer.
      * src/fileio.c (auto_save_error): Use message3 instead of message2.
      * src/dispnew.c (adjust_frame_message_buffer): Remove function.
      b09cca6a
  2. 11 Jan, 2013 1 commit
    • Aaron S. Hawley's avatar
      Disambiguate function and variable references in docstrings. · 9fc9a531
      Aaron S. Hawley authored
      * lisp/comint.el (comint-history-isearch-message): Fix ambiguous doc
       string cross-reference(s).
      
      * lisp/ffap.el (ffap-string-at-point-region, ffap-next)
      (ffap-string-at-point, ffap-string-around)
      (ffap-copy-string-as-kill, ffap-highlight-overlay)
      (ffap-literally): Fix ambiguous doc string cross-reference(s).
      
      * lisp/font-lock.el (font-lock-keywords-alist)
      (font-lock-removed-keywords-alist): Fix ambiguous doc string
              cross-reference(s).
      
      * lisp/help-mode.el (help-xref-symbol-regexp): Add "call" as a hint for
      a cross-reference to a function.
      
      * lisp/info.el (Info-find-emacs-command-nodes): Fix ambiguous doc
       string cross-reference(s).
      
      * lisp/isearch.el (isearch-message-function, isearch-fail-pos): Fix
       ambiguous doc string cross-reference(s).
      
      * lisp/misearch.el (multi-isearch-next-buffer-function): Fix ambiguous
       doc string cross-reference(s).
      
      * lisp/newcomment.el (comment-box): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/printing.el (pr-txt-printer-alist, pr-ps-printer-alist)
      (pr-setting-database): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/ps-print.el (ps-even-or-odd-pages, ps-spool-buffer-with-faces)
      (ps-n-up-filling-database): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/server.el (server-buffer, server-log): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/simple.el (newline, delete-backward-char, delete-forward-char)
      (minibuffer-history-isearch-message, kill-line, track-eol)
      (temporary-goal-column): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/whitespace.el (whitespace-point)
      (whitespace-font-lock-refontify, whitespace-bob-marker)
      (whitespace-eob-marker): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/calc/calc.el (calc-highlight-selections-with-faces)
       (calc-dispatch): Fix ambiguous doc string cross-reference(s).
      
      * lisp/emacs-lisp/edebug.el (edebug-read, edebug-eval-defun): Fix
       ambiguous doc string cross-reference(s).
      
      * lisp/gnus/gnus-start.el (gnus-check-new-newsgroups): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/gnus/gnus-sum.el (gnus-summary-newsgroup-prefix): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/international/mule.el (add-to-coding-system-list): Fix ambiguous
       doc string cross-reference(s).
      
      * lisp/progmodes/cc-fonts.el (c-font-lock-keywords-3)
      (c++-font-lock-keywords-3, objc-font-lock-keywords-3)
      (java-font-lock-keywords-3, idl-font-lock-keywords-3)
      (pike-font-lock-keywords-3): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/progmodes/compile.el (compile): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/progmodes/etags.el (tags-table-files)
      (tags-table-files-function, tags-included-tables-function): Fix
       ambiguous doc string cross-reference(s).
      
      * lisp/progmodes/gdb-mi.el (gdb, gdb-setup-windows)
      (gdb-restore-windows): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/textmodes/flyspell.el (flyspell-mark-duplications-flag)
      (flyspell-default-deplacement-commands): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/textmodes/ispell.el (ispell-accept-output): Fix ambiguous doc
       string cross-reference(s).
      
      * lisp/textmodes/sgml-mode.el (html-tag-help): Fix ambiguous doc string
       cross-reference(s).
      
      * lisp/vc/compare-w.el (compare-ignore-whitespace)
      (compare-ignore-case, compare-windows-dehighlight): Fix ambiguous
       doc string cross-reference(s).
      
      * lisp/vc/diff.el (diff): Fix ambiguous doc string cross-reference(s).
      
      * src/insdel.c (Fcombine_after_change_execute, syms_of_insdel): Fix
       ambiguous doc string cross-reference(s).
      
      * src/keyboard.c (Fcommand_execute, syms_of_keyboard): Fix ambiguous
       doc string cross-reference(s).
      
      * src/window.c (Fwindow_point, syms_of_window): Fix ambiguous doc
       string cross-reference(s).
      
      Fixes: debbugs:12686
      9fc9a531
  3. 08 Jan, 2013 1 commit
  4. 06 Jan, 2013 1 commit
    • Chong Yidong's avatar
      Fix echoing of replayed keys. · 56ed110a
      Chong Yidong authored
      * keyboard.c (echo_add_char): New function, factored out from
      echo_char.  Don't add a space if the previous echo string was
      empty.
      (echo_char): Use it.
      (read_key_sequence): When echoing mock input, ensure that the
      trailing dash is properly added.
      
      Fixes: debbugs:13255
      56ed110a
  5. 01 Jan, 2013 1 commit
  6. 26 Dec, 2012 1 commit
    • Dmitry Antipov's avatar
      * keyboard.c (record_asynch_buffer_change): Initialize an event · 4b298d5a
      Dmitry Antipov authored
      only if it's really needed.
      * frame.h (enum output_method): Remove output_mac member since
      it's a leftover from the deleted code.
      * frame.c (Fframep): Adjust user here ...
      * terminal.c (Fterminal_live_p): ... and here.
      * coding.c (Qmac): Now here because it's only used to denote
      end-of-line encoding type.
      (syms_of_coding): DEFSYM it.
      * frame.h (Qmac): Remove duplicated declaration.
      4b298d5a
  7. 11 Dec, 2012 1 commit
    • Dmitry Antipov's avatar
      Consistently use marker_position and marker_byte_position. · 4c1acb95
      Dmitry Antipov authored
      * fringe.c (Ffringe_bitmaps_at_pos):
      * indent.c (Fvertical_motion):
      * insdel.c (prepare_to_modify_buffer):
      * keyboard.c (make_lispy_position):
      * window.c (Fwindow_end, Fpos_visible_in_window_p, unshow_buffer)
      (window_scroll_pixel_based, displayed_window_lines)
      (Fset_window_configuration):
      * xdisp.c (message_dolog, with_echo_area_buffer_unwind_data)
      (mark_window_display_accurate_1, redisplay_window, decode_mode_spec):
      Replace direct access to marker fields with calls
      to marker_position and/or marker_byte_position.
      4c1acb95
  8. 10 Dec, 2012 2 commits
    • Daniel Colascione's avatar
      Fix cygw32 build break · 8db4b52f
      Daniel Colascione authored
      8db4b52f
    • Rüdiger Sonderfeld's avatar
      Support filesystem notification through inotify on GNU/Linux. · 81606b10
      Rüdiger Sonderfeld authored
       configure.ac (inotify): New option.
       (HAVE_INOTIFY): Test for inotify.
      
       src/termhooks.h (enum event_kind) [HAVE_INOTIFY]: Add
       FILE_NOTIFY_EVENT.
       src/lisp.h (syms_of_inotify) [HAVE_INOTIFY]: Add prototype.
       src/keyboard.c (Qfile_inotify) [HAVE_INOTIFY]: New variable.
       (syms_of_keyboard): DEFSYM it.
       (kbd_buffer_get_event) [HAVE_INOTIFY]: Generate FILE_NOTIFY_EVENT.
       (make_lispy_event): Support FILE_NOTIFY_EVENT by generating
       Qfile_inotify events.
       (keys_of_keyboard) [HAVE_INOTIFY]: Bind file-inotify events in
       special-event-map to inotify-handle-event.
       src/emacs.c (main) [HAVE_INOTIFY]: Call syms_of_inotify.
       src/Makefile.in (base_obj): Add inotify.o.
       src/inotify.c: New file.
      
       lisp/subr.el (inotify-event-p, inotify-handle-event): New functions.
      
       test/automated/inotify-test.el: New test.
      81606b10
  9. 08 Dec, 2012 1 commit
    • Paul Eggert's avatar
      Assume POSIX 1003.1-1988 or later for signal.h. · d983a10b
      Paul Eggert authored
      Exceptions: do not assume SIGCONT, SIGSTOP, SIGTSTP, SIGTTIN,
      SIGTTOU, SIGUSR1, SIGUSR2, as Microsoft platforms lack these.
      * admin/CPP-DEFINES (SIGALRM, SIGCHLD, SIGHUP, SIGKILL, SIGPIPE, SIGQUIT):
      Remove.
      (SIGTRAP): Remove this one too, as config.h no longer defines it.
      * admin/merge-gnulib (GNULIB_MODULES): Add sig2str.
      * configure.ac (PTY_OPEN, PTY_TTY_NAME_SPRINTF):
      Use SIGCHLD rather than SIGCLD.
      * lib/sig2str.c, lib/sig2str.h, m4/sig2str.m4: New files, from gnulib.
      * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
      * lib/makefile.w32-in (GNULIBOBJS): Add $(BUILD)/sig2str.$(O).
      * src/process.c [subprocesses]: Include <c-ctype.h>, <sig2str.h>.
      (deleted_pid_list, Fdelete_process, create_process)
      (record_child_status_change, handle_child_signal, deliver_child_signal)
      (init_process_emacs, syms_of_process):
      Assume SIGCHLD is defined.
      (parse_signal): Remove.  All uses removed.
      (abbr_to_signal): New static function.
      (Fsignal_process): Use it to convert signal names to ints.
      * src/sysdep.c (sys_suspend) [!DOS_NT]: Use kill (0, ...) rather than
      kill (getpgrp (), ...).
      (emacs_sigaction_init): Assume SIGCHLD is defined.
      (init_signals): Assume SIGALRM, SIGCHLD, SIGHUP, SIGKILL,
      SIGPIPE, and SIGQUIT are defined.  Do not worry about SIGCLD any more.
      * src/syssignal.h (EMACS_KILLPG): Remove.
      All uses replaced by 'kill' with a negative pid.
      (SIGCHLD): Remove definition, as we now assume SIGCHLD.
      * src/w32proc.c (sys_kill): Support negative pids compatibly with POSIX.
      
      Fixes: debbugs:13026
      d983a10b
  10. 06 Dec, 2012 1 commit
    • Dmitry Antipov's avatar
      * frame.h (x_char_width, x_char_height): Remove prototypes. · 1700db3c
      Dmitry Antipov authored
      * w32term.h (x_char_width, x_char_height): Likewise.
      * xfns.c (x_char_width, x_char_height): Remove.
      * w32fns.c (x_char_width, x_char_height): Likewise.
      * nsfns.c (x_char_width, x_char_height): Likewise.
      * frame.c (Fframe_char_width): Use FRAME_COLUMN_WIDTH for
      all window frames.
      (Fframe_char_height): Likewise with FRAME_LINE_HEIGHT.
      * keyboard.c (command_loop_1): Remove prototype.
      (command_loop_2, top_level_1): Add static to match prototype.
      1700db3c
  11. 27 Nov, 2012 1 commit
    • Paul Eggert's avatar
      Assume POSIX 1003.1-1988 or later for errno.h. · 22626a85
      Paul Eggert authored
      * lib-src/movemail.c (main): Assume EAGAIN and EBUSY.
      * src/dired.c (directory_files_internal, file_name_completion):
      Assume EAGAIN and EINTR are defined.
      * src/fileio.c (Fcopy_file): Assume EISDIR is defined.
      * src/gmalloc.c (ENOMEM, EINVAL): Assume they're defined.
      * src/gnutls.c (emacs_gnutls_write): Assume EAGAIN is defined.
      * src/lread.c (readbyte_from_file): Assume EINTR is defined.
      * src/process.c (wait_reading_process_output, send_process) [subprocesses]:
      Assume EIO and EAGAIN are defined.
      * src/unexcoff.c (write_segment): Assume EFAULT is defined.
      
      Fixes: debbugs:12968
      22626a85
  12. 24 Nov, 2012 1 commit
  13. 17 Nov, 2012 1 commit
    • Paul Eggert's avatar
      Assume POSIX 1003.1-1988 or later for fcntl.h. · 49cdacda
      Paul Eggert authored
      * admin/CPP-DEFINES (O_RDONLY, O_RDWR, HAVE_FCNTL_H): Remove.
      * admin/merge-gnulib (GNULIB_MODULES): Add fcntl-h.
      * configure.ac: Do not check for fcntl.h.
      * lib/gnulib.mk: Regenerate.
      * lib-src/movemail.c, lib-src/update-game-score.c: Assume <fcntl.h> exists.
      * nt/inc/sys/socket.h (O_NONBLOCK): Rename from O_NDELAY, since the
      POSIX name for this flag is O_NONBLOCK.  All uses changed.
      * nt/inc/unistd.h (O_RDWR, O_NOCTTY): New macros.  Like AT_FDCWD etc.
      these really should be moved to a replacement <fcntl.h> if and
      when that gets implemented.  In the meantime, include <fcntl.h>
      to make sure we don't override its definitions.
      * src/callproc.c (relocate_fd): Assume F_DUPFD.
      * src/emacs.c, src/term.c (O_RDWR): Remove.
      * src/keyboard.c (tty_read_avail_input): Use O_NONBLOCK rather than
      O_NDELAY, since O_NONBLOCK is the standard name for this flag.
      * src/nsterm.m: Assume <fcntl.h> exists.
      * src/process.c (NON_BLOCKING_CONNECT, allocate_pty, create_process)
      (create_pty, Fmake_network_process, server_accept_connection)
      (wait_reading_process_output, init_process_emacs):
      Assume O_NONBLOCK.
      (wait_reading_process_output): Put in a special case for WINDOWSNT
      to mimick the older behavior where it had O_NDELAY but not O_NONBLOCK.
      It's not clear this is needed, but it's a more-conservative change.
      (create_process): Assume FD_CLOEXEC.
      (create_process, create_pty): Assume O_NOCTTY.
      * src/sysdep.c (init_sys_modes, reset_sys_modes): Assume F_SETFL.
      (reset_sys_modes): Use O_NONBLOCK rather than O_NDELAY.
      Omit if not DOS_NT, since F_GETFL is not defined there.
      (serial_open): Assume O_NONBLOCK and O_NOCTTY.
      * src/term.c: Include <fcntl.h>, for flags like O_NOCTTY.
      (O_NOCTTY): Remove.
      (init_tty): Assume O_IGNORE_CTTY is defined to 0 on platforms that
      lack it, since gnulib guarantees this.
      * src/w32.c (fcntl): Test for O_NONBLOCK rather than O_NDELAY.
      
      Fixes: debbugs:12881
      49cdacda
  14. 08 Nov, 2012 1 commit
  15. 02 Nov, 2012 1 commit
    • Dmitry Antipov's avatar
      Remove pad from struct input_event. · 2b371ff7
      Dmitry Antipov authored
      * termhooks.h (struct input_event): Remove padding field.
      Adjust comment.
      * keyboard.c (event_to_kboard): Simplify because frame_or_window
      member is never cons for a long time.  Adjust comment.
      (mark_kboards): Adjust because SELECTION_REQUEST_EVENT and
      SELECTION_CLEAR_EVENT has no Lisp_Objects to mark.  Add comment.
      * xterm.c (handle_one_xevent): Do not initialize frame_or_window
      field of SELECTION_REQUEST_EVENT and SELECTION_CLEAR_EVENT.
      2b371ff7
  16. 20 Oct, 2012 1 commit
    • Paul Eggert's avatar
      Port to OpenBSD 5.1. · 4973679b
      Paul Eggert authored
      * frame.c (Fmouse_position, Fmouse_pixel_position):
      * xdisp.c (produce_stretch_glyph):
      Declare local vars only when they're needed.
      This is clearer and avoids a warning on OpenBSD about unused vars.
      * frame.h (FRAME_WINDOW_P): Always evaluate its argument.
      This is safer, and avoids OpenBSD warnings about unused vars.
      * keyboard.c (record_menu_key): Remove unnecessary decl.
      (poll_timer): Define only if POLL_FOR_INPUT is defined.
      * unexelf.c (ELFSIZE) [!ElfW]: Do not define if already defined,
      as our definition clashes with OpenBSD's.
      * xfaces.c (load_face_colors, check_lface_attrs)
      (get_lface_attributes_no_remap, get_lface_attributes)
      (lface_fully_specified_p, x_supports_face_attributes_p)
      (tty_supports_face_attributes_p, face_fontset, realize_face)
      (realize_x_face, realize_tty_face):
      Declare parameters to be Lisp_Object[LFACE_VECTOR_SIZE], not
      merely Lisp_Object *.  This is more informative and avoids
      a warning on OpenBSD about accessing beyond an object's size.
      4973679b
  17. 10 Oct, 2012 1 commit
    • Paul Eggert's avatar
      keyboard.c, keymap.c: Use bool for booleans. · 9fa1de30
      Paul Eggert authored
      * dispnew.c (sit_for): Distinguish between 3-way display_option
      and boolean do_display.
      * keyboard.c (single_kboard, this_command_key_count_reset)
      (waiting_for_input, echoing, immediate_quit, input_pending)
      (interrupt_input, interrupts_deferred, pop_kboard)
      (temporarily_switch_to_single_kboard, ignore_mouse_drag_p)
      (command_loop_1, adjust_point_for_property)
      (safe_run_hooks_error, input_polling_used, read_char):
      (help_char_p, readable_events, kbd_buffer_events_waiting)
      (kbd_buffer_get_event, timer_check_2, make_lispy_event)
      (lucid_event_type_list_p, get_input_pending):
      (gobble_input, menu_separator_name_p, menu_bar_item)
      (parse_menu_item, parse_tool_bar_item, read_char_x_menu_prompt)
      (read_char_minibuf_menu_prompt, access_keymap_keyremap)
      (keyremap_step, test_undefined, read_key_sequence)
      (detect_input_pending, detect_input_pending_ignore_squeezables)
      (detect_input_pending_run_timers, requeued_events_pending_p)
      (quit_throw_to_read_char, Fset_input_interrupt_mode):
      * keymap.c (get_keymap, keymap_parent, keymap_memberp)
      (access_keymap_1, access_keymap, map_keymap, get_keyelt)
      (Fdefine_key, Flookup_key, struct accessible_keymaps_data)
      (accessible_keymaps_1, Fkey_description, push_key_description):
      (shadow_lookup, struct where_is_internal_data)
      (where_is_internal, Fwhere_is_internal, where_is_internal_1)
      (Fdescribe_buffer_bindings, describe_map_tree, struct describe_map_elt)
      (describe_map, describe_vector):
      * menu.c (single_menu_item):
      * nsmenu.m (ns_update_menubar):
      * process.c (wait_reading_process_output):
      * search.c (scan_buffer, scan_newline):
      Use bool for boolean.
      * keyboard.c (timers_run, swallow_events)
      (detect_input_pending_run_timers):
      * process.c (wait_reading_process_output):
      Use unsigned for counter where wraparound-on-overflow is desired,
      since unsigned is guaranteed to have that behavior and signed is not.
      (read_char): Use ptrdiff_t for string length.
      (get_input_pending): Remove first argument, since it was always
      the same pointer-to-int (now pointer-to-boolean) &input_pending,
      and behave as if it had that value.  Return new value of
      input_pending.  All callers changed.
      * keyboard.h (struct kboard): Use unsigned : 1 for boolean member
      immediate_echo.  Use ptrdiff_t for echo_after_prompt, since it's
      a string length.
      * keymap.c (push_key_description): Omit last arg, which was always 1.
      All callers changed.
      9fa1de30
  18. 08 Oct, 2012 1 commit
  19. 07 Oct, 2012 1 commit
  20. 06 Oct, 2012 2 commits
  21. 04 Oct, 2012 1 commit
  22. 01 Oct, 2012 1 commit
    • Paul Eggert's avatar
      Prefer plain 'static' to 'static inline'. · b0ab8123
      Paul Eggert authored
      With static functions, modern compilers inline pretty well by
      themselves; advice from programmers often hurts as much as it helps.
      On my host (x86-64, Fedora 17, GCC 4.7.2, default 'configure'),
      this change shrinks the text size of the Emacs executable by 1.1%
      without affecting CPU significantly in my benchmark.
      * alloc.c (mem_find, live_string_p, live_cons_p, live_symbol_p)
      (live_float_p, live_misc_p, live_vector_p, live_buffer_p)
      (mark_maybe_object, mark_maybe_pointer, bounded_number):
      * buffer.c (bset_abbrev_mode, bset_abbrev_table)
      (bset_auto_fill_function, bset_auto_save_file_format)
      (bset_auto_save_file_name, bset_backed_up, bset_begv_marker)
      (bset_bidi_display_reordering, bset_buffer_file_coding_system)
      (bset_cache_long_line_scans, bset_case_fold_search)
      (bset_ctl_arrow, bset_cursor_in_non_selected_windows)
      (bset_cursor_type, bset_display_table, bset_extra_line_spacing)
      (bset_file_format, bset_file_truename, bset_fringe_cursor_alist)
      (bset_fringe_indicator_alist, bset_fringes_outside_margins)
      (bset_header_line_format, bset_indicate_buffer_boundaries)
      (bset_indicate_empty_lines, bset_invisibility_spec)
      (bset_left_fringe_width, bset_major_mode, bset_mark)
      (bset_minor_modes, bset_mode_line_format, bset_mode_name)
      (bset_name, bset_overwrite_mode, bset_pt_marker)
      (bset_right_fringe_width, bset_save_length)
      (bset_scroll_bar_width, bset_scroll_down_aggressively)
      (bset_scroll_up_aggressively, bset_selective_display)
      (bset_selective_display_ellipses, bset_vertical_scroll_bar_type)
      (bset_word_wrap, bset_zv_marker, set_buffer_overlays_before)
      (set_buffer_overlays_after):
      * category.c (bset_category_table):
      * charset.c (read_hex):
      * coding.c (produce_composition, produce_charset)
      (handle_composition_annotation, handle_charset_annotation)
      (char_encodable_p):
      * dispnew.c (swap_glyph_pointers, copy_row_except_pointers)
      (assign_row, set_frame_matrix_frame, make_current)
      (add_row_entry):
      * eval.c (set_specpdl_symbol, set_specpdl_old_value):
      * fns.c (maybe_resize_hash_table):
      * frame.c (fset_buffer_predicate, fset_minibuffer_window):
      * gmalloc.c (register_heapinfo):
      * image.c (lookup_image_type):
      * intervals.c (set_interval_object, set_interval_left)
      (set_interval_right, copy_interval_parent, rotate_right)
      (rotate_left, balance_possible_root_interval):
      * keyboard.c (kset_echo_string, kset_kbd_queue)
      (kset_keyboard_translate_table, kset_last_prefix_arg)
      (kset_last_repeatable_command, kset_local_function_key_map)
      (kset_overriding_terminal_local_map, kset_real_last_command)
      (kset_system_key_syms, clear_event, set_prop):
      * lread.c (digit_to_number):
      * marker.c (attach_marker, live_buffer, set_marker_internal):
      * nsterm.m (ns_compute_glyph_string_overhangs):
      * process.c (pset_buffer, pset_command)
      (pset_decode_coding_system, pset_decoding_buf)
      (pset_encode_coding_system, pset_encoding_buf, pset_filter)
      (pset_log, pset_mark, pset_name, pset_plist, pset_sentinel)
      (pset_status, pset_tty_name, pset_type, pset_write_queue):
      * syntax.c (bset_syntax_table, dec_bytepos):
      * terminal.c (tset_param_alist):
      * textprop.c (interval_has_some_properties)
      (interval_has_some_properties_list):
      * window.c (wset_combination_limit, wset_dedicated)
      (wset_display_table, wset_hchild, wset_left_fringe_width)
      (wset_left_margin_cols, wset_new_normal, wset_new_total)
      (wset_normal_cols, wset_normal_lines, wset_parent, wset_pointm)
      (wset_right_fringe_width, wset_right_margin_cols)
      (wset_scroll_bar_width, wset_start, wset_temslot, wset_vchild)
      (wset_vertical_scroll_bar_type, wset_window_parameters):
      * xdisp.c (wset_base_line_number, wset_base_line_pos)
      (wset_column_number_displayed, wset_region_showing)
      (window_box_edges, run_window_scroll_functions)
      (append_glyph_string_lists, prepend_glyph_string_lists)
      (append_glyph_string, set_glyph_string_background_width)
      (append_glyph, append_composite_glyph)
      (take_vertical_position_into_account):
      * xfaces.c (x_create_gc, x_free_gc, merge_face_vectors)
      (face_attr_equal_p, lface_equal_p, hash_string_case_insensitive)
      (lface_hash, lface_same_font_attributes_p, lookup_face):
      * xml.c (libxml2_loaded_p):
      * xterm.c (x_set_mode_line_face_gc, x_set_glyph_string_gc)
      (x_set_glyph_string_clipping, x_clear_glyph_string_rect):
      Now 'static', not 'static inline'.
      
      Fixes: debbugs:12541
      b0ab8123
  23. 23 Sep, 2012 2 commits
    • Paul Eggert's avatar
      Simplify and avoid signal-handling races. · 4d7e6e51
      Paul Eggert authored
      * nt/inc/ms-w32.h (emacs_raise): New macro.
      * src/alloc.c (die):
      * src/sysdep.c (emacs_abort) [HAVE_NTGUI]:
      Avoid recursive loop if there's a fatal error in the function itself.
      * src/atimer.c (pending_atimers):
      * src/blockinput.h: Don't include "atimer.h"; no longer needed.
      (interrupt_input_pending): Remove.  All uses removed.
      pending_signals now counts both atimers and ordinary interrupts.
      This is less racy than having three separate pending-signal flags.
      (block_input, unblock_input, totally_unblock_input, unblock_input_to)
      (input_blocked_p):
      Rename from their upper-case counterparts BLOCK_INPUT,
      UNBLOCK_INPUT, TOTALLY_UNBLOCK_INPUT, UNBLOCK_INPUT_TO,
      INPUT_BLOCKED_P, and turn into functions.  All uses changed.
      This makes it easier to access volatile variables more accurately.
      (BLOCK_INPUT_RESIGNAL): Remove.  All uses replaced by unblock_input ().
      (input_blocked_p): Prefer this to 'interrupt_input_blocked', as
      that's more reliable if the code is buggy and sets
      interrupt_input_blocked to a negative value.  All uses changed.
      * src/atimer.c (deliver_alarm_signal):
      Remove.  No need to deliver this to the parent; any thread can
      handle this signal now.  All uses replaced by underlying handler.
      * src/atimer.c (turn_on_atimers):
      * src/dispnew.c (handle_window_change_signal):
      * src/emacs.c (handle_danger_signal):
      * src/keyboard.c (kbd_buffer_get_event):
      Don't reestablish signal handler; not needed with sigaction.
      * src/blockinput.h (UNBLOCK_INPUT_TO, TOTALLY_UNBLOCK_INPUT)
      (UNBLOCK_INPUT_TO):
      Rework to avoid unnecessary accesses to volatile variables.
      (UNBLOCK_INPUT_TO): Now a function.
      (totally_unblock_input, unblock_input): New decls.
      * src/data.c (handle_arith_signal, deliver_arith_signal): Move to sysdep.c
      (init_data): Remove.  Necessary stuff now done in init_signal.
      * src/emacs.c, src/xdisp.c: Include "atimer.h", since we invoke atimer functions.
      * src/emacs.c (handle_fatal_signal, deliver_fatal_signal): Move to sysdep.c.
      (fatal_error_code): Remove; no longer needed.
      (terminate_due_to_signal): Rename from fatal_error_backtrace, since
      it doesn't always backtrace.  All uses changed.  No need to reset
      signal to default, since sigaction and/or die does that for us now.
      Use emacs_raise (FOO), not kill (getpid (), FOO).
      (main): Check more-accurately whether we're dumping.
      Move fatal-error setup to sysdep.c
      * src/floatfns.c: Do not include "syssignal.h"; no longer needed.
      * src/gtkutil.c (xg_get_file_name, xg_get_font):
      Remove no-longer-needed signal-mask manipulation.
      * src/keyboard.c, src/process.c (POLL_FOR_INPUT):
      Don't depend on USE_ASYNC_EVENTS, a symbol that is never defined.
      * src/keyboard.c (read_avail_input): Remove.
      All uses replaced by gobble_input.
      (Ftop_level): Use TOTALLY_UNBLOCK_INPUT rather than open code.
      (kbd_buffer_store_event_hold, gobble_input):
      (record_asynch_buffer_change) [USABLE_SIGIO]:
      (store_user_signal_events):
      No need to mess with signal mask.
      (gobble_input): If blocking input and there are terminals, simply
      set pending_signals to 1 and return.  All hooks changed to not
      worry about whether input is blocked.
      (process_pending_signals): Clear pending_signals before processing
      them, in case a signal comes in while we're processing.
      By convention callers now test pending_signals before calling us.
      (UNBLOCK_INPUT_TO, unblock_input, totally_unblock_input):
      New functions, to support changes to blockinput.h.
      (handle_input_available_signal): Now extern.
      (reinvoke_input_signal): Remove.  All uses replaced by
      handle_async_input.
      (quit_count): Now volatile, since a signal handler uses it.
      (handle_interrupt): Now takes bool IN_SIGNAL_HANDLER as arg.  All
      callers changed.  Block SIGINT only if not already blocked.
      Clear sigmask reliably, even if Fsignal returns, which it can.
      Omit unnecessary accesses to volatile var.
      (quit_throw_to_read_char): No need to restore sigmask.
      * src/keyboard.c (gobble_input, handle_user_signal):
      * src/process.c (wait_reading_process_output):
      Call signal-handling code rather than killing ourselves.
      * src/lisp.h: Include <float.h>, for...
      (IEEE_FLOATING_POINT): New macro, moved here to avoid duplication.
      (pending_signals): Now volatile.
      (syms_of_data): Now const if IEEE floating point.
      (handle_input_available_signal) [USABLE_SIGIO]:
      (terminate_due_to_signal, record_child_status_change): New decls.
      * src/process.c (create_process): Avoid disaster if memory is exhausted
      while we're processing a vfork, by tightening the critical section
      around the vfork.
      (send_process_frame, process_sent_to, handle_pipe_signal)
      (deliver_pipe_signal): Remove.  No longer needed, as Emacs now
      ignores SIGPIPE.
      (send_process): No need for setjmp/longjmp any more, since the
      SIGPIPE stuff is now gone.  Instead, report an error if errno
      is EPIPE.
      (record_child_status_change): Now extern.  PID and W are now args.
      Return void, not bool.  All callers changed.
      * src/sysdep.c (wait_debugging) [(BSD_SYSTEM || HPUX) && !defined (__GNU__)]:
      Remove.  All uses removed.  This bug should be fixed now in a
      different way.
      (wait_for_termination_1): Use waitpid rather than sigsuspend,
      and record the child status change directly.  This avoids the
      need to futz with the signal mask.
      (process_fatal_action): Move here from emacs.c.
      (emacs_sigaction_flags): New function, containing
      much of what used to be in emacs_sigaction_init.
      (emacs_sigaction_init): Use it.  Block nonfatal system signals that are
      caught by emacs, to make races less likely.
      (deliver_process_signal): Rename from handle_on_main_thread.
      All uses changed.
      (BACKTRACE_LIMIT_MAX): Now at top level.
      (thread_backtrace_buffer, threadback_backtrace_pointers):
      New static vars.
      (deliver_thread_signal, deliver_fatal_thread_signal):
      New functions, for more-accurate delivery of thread-specific signals.
      (handle_fatal_signal, deliver_fatal_signal): Move here from emacs.c.
      (deliver_arith_signal): Handle in this thread, not
      in the main thread, since it's triggered by this thread.
      (maybe_fatal_sig): New function.
      (init_signals): New arg DUMPING so that we can be more accurate
      about whether we're dumping.  Caller changed.
      Treat thread-specific signals differently from process-general signals.
      Block all signals while handling fatal error; that's safer.
      xsignal from SIGFPE only on non-IEEE hosts, treating it as fatal
      on IEEE hosts.
      When batch, ignore SIGHUP, SIGINT, SIGTERM if they were already ignored.
      Ignore SIGPIPE unless batch.
      (emacs_backtrace): Output backtrace for the appropriate thread,
      which is not necessarily the main thread.
      * src/syssignal.h: Include <stdbool.h>.
      (emacs_raise): New macro.
      * src/xterm.c (x_connection_signal): Remove; no longer needed
      now that we use sigaction.
      (x_connection_closed): No need to mess with sigmask now.
      (x_initialize): No need to reset SIGPIPE handler here, since
      init_signals does this for us now.
      
      Fixes: debbugs:12471
      4d7e6e51
    • Chong Yidong's avatar
  24. 22 Sep, 2012 1 commit
    • Eli Zaretskii's avatar
      Fix bugs #12447 and #12326 with infloop causes by idle timers, update docs. · df9685f3
      Eli Zaretskii authored
       src/keyboard.c (timer_check_2): Move calculation of 'timers' and
       'idle_timers' from here ...
       (timer_check): ... to here.  Use Fcopy_sequence to copy the timer
       lists, to avoid infloops when the timer does something stupid,
       like reinvoke itself with the same or smaller time-out.
      
       lisp/emacs-lisp/timer.el (run-with-idle-timer)
       (timer-activate-when-idle): Warn against reinvoking an idle timer
       from within its own timer action.
      
       doc/lispref/os.texi (Idle Timers): Warn against reinvoking an idle timer
       from within its own timer action.
      df9685f3
  25. 20 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Omit unused arg EXPECTED from socket hooks. · f75beb47
      Paul Eggert authored
      * keyboard.c (gobble_input, read_avail_input, tty_read_avail_input):
      * nsterm.m (ns_term_init):
      * termhooks.h (struct terminal.read_socket_hook):
      * w32inevt.c (w32_console_read_socket):
      * w32term.c (w32_read_socket):
      * xterm.c (XTread_socket):
      Omit unused arg EXPECTED.  All callers changed.
      (store_user_signal_events): Return void, not int, since callers no
      longer care about the return value.  All uses changed.
      f75beb47
  26. 17 Sep, 2012 1 commit
    • Daniel Colascione's avatar
      Implement cygw32 · 0fda9b75
      Daniel Colascione authored
      Here, we use the generic window-system configuration system we just
      implemented to support the w32 window-system in the mainline build
      under Cygwin.  (Previously, the w32 window system could only be
      compiled as part of the NT-native Emacs build process.)
      
      The changes in this patch need to be applied atomically in order to
      avoid breaking Emacs.  The changes include:
      
        - Changes throughout the Lisp and C code to not assume that
            NT Emacs and the w32 window system are synonymous.
      
        - Wiring up the regular select(2) event loop to Windows messages
      
        - Cleaning up the w32 drag-and-drop receiving code.
      
        - Exposing Cygwin path conversion functions to elisp.
      
        - Unicode file dialog support when compiling for Cygwin.
      
        - Splitting the w32 term lisp initialization code into code
          applicable to any w32 window-system and code specific to
          system-type windows-nt.
      
        - Integrating the old and new w32 code into the build system.
      0fda9b75
  27. 16 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Remove configure's --without-sync-input option. · 0caaedb1
      Paul Eggert authored
      When auditing signal-handling in preparation for cleaning it up,
      I found that SYNC_INPUT has race conditions and would be a real
      pain to fix.  Since it's an undocumented and deprecated
      configure-time option, now seems like a good time to remove it.
      Also see <http://bugs.gnu.org/11080#16>.
      * configure.ac (SYNC_INPUT, BROKEN_SA_RESTART): Remove.
      * admin/CPP-DEFINES (BROKEN_SA_RESTART, SA_RESTART): Remove.
      * etc/TODO (Make SYNC_INPUT the default): Remove, as the code now
      behaves as if SYNC_INPUT is always true.
      * src/alloc.c (_bytes_used, __malloc_extra_blocks, _malloc_internal)
      (_free_internal) [!DOUG_LEA_MALLOC]: Remove decls.
      (alloc_mutex) [!SYSTEM_MALLOC && !SYNC_INPUT && HAVE_PTHREAD]:
      (malloc_hysteresis):
      (check_depth) [XMALLOC_OVERRUN_CHECK]:
      (MALLOC_BLOCK_INPUT, MALLOC_UNBLOCK_INPUT):
      (__malloc_hook, __realloc_hook, __free_hook, BYTES_USED)
      (dont_register_blocks, bytes_used_when_reconsidered)
      (bytes_used_when_full, emacs_blocked_free, emacs_blocked_malloc)
      (emacs_blocked_realloc, reset_malloc_hooks, uninterrupt_malloc):
      [!SYSTEM_MALLOC && !SYNC_INPUT]:
      Remove. All uses removed.
      (MALLOC_BLOCK_INPUT, MALLOC_UNBLOCK_INPUT): Use a different
      implementation, one that depends on whether the new macro
      XMALLOC_BLOCK_INPUT_CHECK is defined, not on whether SYNC_INPUT
      is defined.
      * src/atimer.c (run_timers, handle_alarm_signal):
      * src/keyboard.c (pending_signal, poll_for_input_1, poll_for_input)
      (handle_async_input, process_pending_signals)
      (handle_input_available_signal, init_keyboard):
      * src/nsterm.m (ns_read_socket):
      * src/process.c (wait_reading_process_output):
      * src/regex.c (immediate_quit, IMMEDIATE_QUIT_CHECK):
      * src/sysdep.c (emacs_sigaction_init) [SA_RESTART]:
      (emacs_write):
      * src/xterm.c (XTread_socket):
      Assume SYNC_INPUT.
      * src/conf_post.h (SA_RESTART) [IRIX6_5]: Do not #undef.
      * src/eval.c (handling_signal): Remove.  All uses removed.
      * src/lisp.h (ELSE_PENDING_SIGNALS): Remove.
      All uses replaced with the SYNC_INPUT version.
      (reset_malloc_hooks, uninterrupt_malloc, handling_signal):
      Remove decls.
      * src/sysdep.c, src/syssignal.h (main_thread) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
      Now static.
      
      Fixes: debbugs:12450
      0caaedb1
  28. 15 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Port better to POSIX hosts lacking _setjmp. · 0328b6de
      Paul Eggert authored
      * configure.ac (HAVE__SETJMP, HAVE_SIGSETJMP): New symbols.
      (_setjmp, _longjmp): Remove.
      * src/lisp.h: Include <setjmp.h> here, since we use its symbols here.
      All instances of '#include <setjmp.h>' removed, if the
      only reason for the instance was because "lisp.h" was included.
      (sys_jmp_buf, sys_setjmp, sys_longjmp): New symbols.
      Unless otherwise specified, replace all uses of jmp_buf, _setjmp,
      and _longjmp with the new symbols.  Emacs already uses _setjmp if
      available, so this change affects only POSIXish hosts that have
      sigsetjmp but not _setjmp, such as some versions of Solaris and
      Unixware.  (Also, POSIX-2008 marks _setjmp as obsolescent.)
      * src/image.c (_setjmp, _longjmp) [HAVE_PNG && !HAVE__SETJMP]: New macros.
      (png_load_body) [HAVE_PNG]:
      (PNG_LONGJMP) [HAVE_PNG && PNG_LIBPNG_VER < 10500]:
      (PNG_JMPBUF) [HAVE_PNG && PNG_LIBPNG_VER >= 10500]:
      Use _setjmp and _longjmp rather than sys_setjmp and sys_longjmp,
      since PNG requires jmp_buf.  This is the only exception to the
      general rule that we now use sys_setjmp and sys_longjmp.
      This exception is OK since this code does not change the signal
      mask or longjmp out of a signal handler.
      
      Fixes: debbugs:12446
      0328b6de
  29. 13 Sep, 2012 2 commits
    • Paul Eggert's avatar
      Use a more backwards-compatible timer format. · c18e885b
      Paul Eggert authored
      * etc/NEWS: Document it.
      * lisp/emacs-lisp/timer.el (timer): PSECS is now at the end, rather than
      being right after USECS, as that better supports old code that
      inadvisedly looked directly at the timer vector.
      * src/keyboard.c (decode_timer): Get PSECS from the 8th (origin-0)
      vector element, not from the 4th, since PSECS is now at the end.
      (Fcurrent_idle_time): Doc fix.
      
      Fixes: debbugs:12430
      c18e885b
    • Paul Eggert's avatar
      Simplify SIGIO usage. · 4a4bbad2
      Paul Eggert authored
      The code that dealt with SIGIO was crufty and confusing, e.g., it
      played tricks like "#undef SIGIO" but these tricks were not used
      consistently.  Simplify mostly by not #undeffing standard symbols,
      e.g., use "defined USABLE_SIGIO" (our symbol, which we can define
      or not as we please) rather than "defined SIGIO" (standard symbol
      that we probably shouldn't #undef).
      * configure.ac (NO_TERMIO, BROKEN_FIONREAD, BROKEN_SIGAIO)
      (BROKEN_SIGPOLL, BROKEN_SIGPTY): Remove.
      (USABLE_FIONREAD, USABLE_SIGIO): New symbols.  All uses of
      'defined SIGIO' replaced with 'defined USABLE_SIGIO', with no need
      to #undef SIGIO now (which was error-prone).  Likewise, all uses
      of 'defined FIONREAD' replaced with 'defined USABLE_FIONREAD'.
      * src/admin/CPP_DEFINES (BROKEN_SIGAIO, BROKEN_SIGIO, BROKEN_SIGPOLL)
      (BROKEN_SIGPTY, NO_TERMIO): Remove.
      * src/conf_post.h [USG5_4]: Do not include <sys/wait.h> here.
      Modules that need it can include it.
      [USG5_4 && emacs]: Likewise, do not include the streams stuff here.
      * src/dispextern.h (ignore_sigio): New decl.
      * src/emacs.c (shut_down_emacs): Invoke unrequest_sigio
      unconditionally, since it's now a no-op if !USABLE_SIGIO.
      * src/emacs.c (shut_down_emacs):
      * src/keyboard.c (kbd_buffer_store_event_hold):
      Use ignore_sigio rather than invoking 'signal' directly.
      * src/keyboard.c (USABLE_FIONREAD && USG5_4): Include <sys/filio.h>,
      for FIONREAD.
      (FIONREAD, SIGIO): Do not #undef.
      (tty_read_avail_input): Use #error rather than a syntax error.
      * src/process.c [USG5_4]: Include <sys/stream.h> and <sys/stropts.h>,
      for I_PIPE, used by SETUP_SLAVE_PTY.
      (DATAGRAM_SOCKETS): Simplify defn, based on USABLE_FIONREAD.
      * src/sysdep.c (croak): Remove; no longer needed.  This bit of
      temporary code, with Fred N. Fish's comment that it's temporary,
      has been in Emacs since at least 1992!
      (init_sigio, reset_sigio, request_sigio, unrequest_sigio):
      Arrange for them to be no-ops in all cases when ! USABLE_SIGIO.
      * src/syssignal.h (croak): Remove decl.
      (SIGIO, SIGPOO, SIGAIO, SIGPTY): Do not #undef; that's too fragile.
      * src/systty.h [!NO_TERMIO]: Do not include <termio.h>; no longer needed
      now that we're termios-only.
      (FIONREAD, ASYNC) [BROKEN_FIONREAD]: Do not #undef.
      * src/term.c (dissociate_if_controlling_tty): Use #error rather than
      a run-time error.
      
      Fixes: debbugs:12408
      4a4bbad2
  30. 12 Sep, 2012 2 commits
    • Stefan Monnier's avatar
      Remove unread-command-char. · bfeae2cf
      Stefan Monnier authored
      * src/keyboard.c (read_char, requeued_events_pending_p, Finput_pending_p)
      (Fdiscard_input, quit_throw_to_read_char, init_keyboard)
      (syms_of_keyboard): Remove support for unread-command-char.
      * lisp/emacs-lisp/debug.el (debugger-outer-unread-command-char, debug)
      (debugger-env-macro): Remove support for unread-command-char.
      
      * lisp/ehelp.el (with-electric-help): Accept functions in
      electric-help-form-to-execute.
      (electric-help-execute-extended, electric-help-ctrl-x-prefix): Use it.
      And replace unread-command-char -> unread-command-events.
      
      * lisp/subr.el (set-temporary-overlay-map): Minimize slightly the impact of
      the temporary map re-appearing on emulation-mode-map-alists.
      
      * lisp/emacs-lisp/edebug.el (def-edebug-form-spec): Remove, it's been broken
      since 22.1.
      bfeae2cf
    • Stefan Monnier's avatar
      * src/eval.c: Add `inhibit-debugger'. · 45b82ad0
      Stefan Monnier authored
      (Qinhibit_debugger): New symbol.
      (call_debugger): Bind it instead of Qdebug_on_error.
      (maybe_call_debugger): Test Vinhibit_debugger.
      (syms_of_eval): Define inhibit-debugger.
      * src/xdisp.c (set_message): Don't bind Qinhibit_debug_on_message.
      (syms_of_xdisp): Remove inhibit-debug-on-message.
      * lisp/emacs-lisp/debug.el (debug): Don't bind debug-on-error since
      inhibit-debugger is bound instead.
      45b82ad0
  31. 11 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Prefer assignment to memcpy when either will do. · ae1d87e2
      Paul Eggert authored
      * lib-src/pop.c (socket_connection) [HAVE_GETADDRINFO]:
      * src/bidi.c (bidi_push_it, bidi_pop_it):
      * src/fns.c (copy_hash_table):
      * src/image.c (define_image_type):
      * src/keyboard.c (kbd_buffer_store_event_hold):
      * src/process.c (Fprocess_send_eof):
      * src/xfaces.c (x_create_gc) [HAVE_NS]:
      * src/xgselect.c (xg_select):
      Use assignment, not memcpy, as either will do here, and assignment is
      more likely to catch type errors.
      ae1d87e2
  32. 07 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Signal-handler cleanup. · 2fe28299
      Paul Eggert authored
      Emacs's signal handlers were written in the old 4.2BSD style with
      sigblock and sigmask and so forth, and this led to some
      inefficiencies and confusion.  Rewrite these to use
      pthread_sigmask etc. without copying signal sets around.  Also,
      get rid of the confusing macros 'SIGNAL_THREAD_CHECK' and
      'signal', and instead use functions that do not attempt to take
      over the system name space.  This patch causes Emacs's text
      segment to shrink by 0.7% on my platform, Fedora 17 x86-64.
      * configure.ac (PTY_OPEN, PTY_TTY_NAME_SPRINTF):
      Adjust to syssignal.h changes.
      (SIGNAL_H_AB): Remove; no longer needed.
      * src/alloc.c, src/emacsgtkfixed.c, src/nsfns.m, src/widget.c, src/xmenu.c:
      Do not include <signal.h> or "syssignal.h", as these
      modules do not use signals.
      * src/atimer.c, src/callproc.c, src/data.c, src/dispnew.c, src/emacs.c:
      * src/floatfns.c, src/gtkutil.c, src/keyboard.c, src/process.c, src/sound.c:
      * src/sysdep.c, src/term.c, src/xterm.c:
      Do not include <signal.h>, as "syssignal.h" does that for us now.
      * src/atimer.c (sigmask_atimers): New function.
      (block_atimers, unblock_atimers): New functions,
      replacing the old macros BLOCK_ATIMERS and UNBLOCK_ATIMERS.
      All uses replaced.
      * src/conf_post.h [SIGNAL_H_AHB]: Do not include <signal.h>;
      no longer needed here.
      * src/emacs.c (main): Inspect existing signal handler with sigaction,
      so that there's	no need to block and unblock SIGHUP.
      * src/sysdep.c (struct save_signal): New member 'action', replacing
      old member 'handler'.
      (save_signal_handlers, restore_signal_handlers):
      Use sigaction instead of 'signal' to save and restore.
      (get_set_sighandler, set_sighandler) [!WINDOWSNT]:
      New function.  All users of 'signal' modified to use set_sighandler
      if they're writeonly, and to use sys_signal if they're read+write.
      (emacs_sigaction_init, forwarded_signal): New functions.
      (sys_signal): Remove.  All uses replaced by calls to sigaction
      and emacs_sigaction_init, or by direct calls to 'signal'.
      (sys_sigmask) [!__GNUC__]: Remove; no longer needed.
      (sys_sigblock, sys_sigunblock, sys_sigsetmask): Remove;
      all uses replaced by pthread_sigmask etc. calls.
      * src/syssignal.h: Include <signal.h>.
      (emacs_sigaction_init, forwarded_signal): New decls.
      (SIGMASKTYPE): Remove.  All uses replaced by its definiens, sigset_t.
      (SIGEMPTYMASK): Remove; all uses replaced by its definiens, empty_mask.
      (sigmask, sys_sigmask): Remove; no longer needed.
      (sigpause): Remove.  All uses replaced by its definiens, sigsuspend.
      (sigblock, sigunblock, sigfree):
      (sigsetmask) [!defined sigsetmask]:
      Remove.  All uses replaced by pthread_sigmask.
      (signal): Remove.  Its remaining uses (with SIG_DFL and SIG_IGN)
      no longer need to be replaced, and its typical old uses
      are now done via emacs_sigaction_init and sigaction.
      (sys_sigblock, sys_sigunblock, sys_sigsetmask): Remove decls.
      (sys_sigdel): Remove; unused.
      (NSIG): Remove a FIXME; the code's fine.  Remove an unnecessary ifdef.
      
      Fixes: debbugs:12327
      2fe28299
  33. 05 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Fix race conditions with signal handlers and errno. · 20ef56db
      Paul Eggert authored
      Be more systematic about preserving errno whenever a signal
      handler returns, even if it's not in the main thread.  Do this by
      renaming signal handlers to distinguish between signal delivery
      and signal handling.  All uses changed.
      * atimer.c (deliver_alarm_signal): Rename from alarm_signal_handler.
      * data.c (deliver_arith_signal): Rename from arith_error.
      * dispnew.c (deliver_window_change_signal): Rename from
      window_change_signal.
      * emacs.c (deliver_error_signal): Rename from fatal_error_signal.
      (deliver_danger_signal) [SIGDANGER]: Rename from memory_warning_signal.
      * keyboard.c (deliver_input_available_signal): Rename from
      input_available_signal.
      (deliver_user_signal): Rename from handle_user_signal.
      (deliver_interrupt_signal): Rename from interrupt_signal.
      * process.c (deliver_pipe_signal): Rename from send_process_trap.
      (deliver_child_signal): Rename from sigchld_handler.
      * atimer.c (handle_alarm_signal):
      * data.c (handle_arith_signal):
      * dispnew.c (handle_window_change_signal):
      * emacs.c (handle_fatal_signal, handle_danger_signal):
      * keyboard.c (handle_input_available_signal):
      * keyboard.c (handle_user_signal, handle_interrupt_signal):
      * process.c (handle_pipe_signal, handle_child_signal):
      New functions, with the actual signal-handling code taken from the
      original respective signal handlers, sans the sporadic attempts to
      preserve errno, since that's now done by handle_on_main_thread.
      * atimer.c (alarm_signal_handler): Remove unnecessary decl.
      * emacs.c, floatfns.c, lisp.h: Remove unused FLOAT_CATCH_SIGKILL cruft.
      * emacs.c (main_thread) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
      Move to sysdep.c.
      (main) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
      Move initialization of main_thread to sysdep.c's init_signals.
      * process.c (waitpid) [!WNOHANG]: #define to wait; that's good enough for
      our usage, and simplifies the mainline code.
      (record_child_status_change): New static function, as a helper
      for handle_child_signal, and with most of the old child handler's
      contents.
      (CAN_HANDLE_MULTIPLE_CHILDREN): New constant.
      (handle_child_signal): Use the above.
      * sysdep.c (main_thread) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
      Moved here from emacs.c.
      (init_signals) [FORWARD_SIGNAL_TO_MAIN_THREAD]: Initialize it;
      code moved here from emacs.c's main function.
      * sysdep.c, syssignal.h (handle_on_main_thread): New function,
      replacing the old SIGNAL_THREAD_CHECK.  All uses changed.  This
      lets callers save and restore errno properly.
      20ef56db
  34. 04 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Simplify redefinition of 'abort' (Bug#12316). · 1088b922
      Paul Eggert authored
      Do not try to redefine the 'abort' function.  Instead, redo
      the code so that it calls 'emacs_abort' rather than 'abort'.
      This removes the need for the NO_ABORT configure-time macro
      and makes it easier to change the abort code to do a backtrace.
      * configure.ac (NO_ABRT): Remove.
      * admin/CPP-DEFINES (NO_ABORT): Remove.
      * nt/inc/ms-w32.h (w32_abort) [HAVE_NTGUI]: Remove.
      * src/.gdbinit: Just stop at emacs_abort, not at w32_abort or abort.
      * src/emacs.c (abort) [!DOS_NT && !NO_ABORT]:
      Remove; sysdep.c's emacs_abort now takes its place.
      * src/lisp.h (emacs_abort): New decl.  All calls from Emacs code to
      'abort' changed to use 'emacs_abort'.
      * src/msdos.c (dos_abort) [defined abort]: Remove; not used.
      (abort) [!defined abort]: Rename to ...
      (emacs_abort): ... new name.
      * src/sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking
      the place of the old 'abort' in emacs.c.
      * src/w32.c, src/w32fns.c (abort): Do not #undef.
      * src/w32.c (emacs_abort): Rename from w32_abort.
      1088b922
  35. 02 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Clean up some extern decls. · a411ac43
      Paul Eggert authored
      Mostly, this hoists extern decls out of .c files and into .h files.
      That way, we're more likely to catch errors if the interfaces change.
      * alloc.c [USE_GTK]: Include "gtkutil.h" so that we need not
      declare xg_mark_data.
      * dispextern.h (x_frame_parm_handlers):
      * font.h (Qxft):
      * lisp.h (Qlexical_binding, Qinternal_interpreter_environment)
      (Qextra_light, Qlight, Qsemi_light, Qsemi_bold, Qbold, Qextra_bold)
      (Qultra_bold, Qoblique, Qitalic):
      Move extern decl here from .c file.
      * alloc.c (xg_mark_data) [USE_GTK]:
      * doc.c (Qclosure):
      * eval.c (Qlexical_binding):
      * fns.c (time) [!HAVE_UNISTD_H]:
      * gtkutil.c (Qxft, Qnormal, Qextra_light, Qlight, Qsemi_light)
      (Qsemi_bold, Qbold, Qextra_bold, Qultra_bold, Qoblique, Qitalic):
      * image.c (Vlibrary_cache, QCloaded_from) [HAVE_NTGUI]:
      * lread.c (Qinternal_interpreter_environment):
      * minibuf.c (Qbuffer):
      * process.c (QCfamily, QCfilter):
      * widget.c (free_frame_faces):
      * xfaces.c (free_frame_menubar) [USE_X_TOOLKIT]:
      * xfont.c (x_clear_errors):
      * xterm.c (x_frame_parm_handlers):
      Remove now-redundant extern decls.
      * keyboard.c, keyboard.h (ignore_mouse_drag_p) [USE_GTK || HAVE_NS]:
      * xfaces.c (Qultra_light, Qreverse_oblique, Qreverse_italic):
      Now static.
      * xfaces.c: Remove unnecessary static decls.
      * xterm.c (updating_frame): Remove decl of nonexistent object.
      a411ac43