1. 10 Jun, 2019 3 commits
  2. 01 Jan, 2019 1 commit
  3. 31 Aug, 2018 1 commit
    • Michael Albinus's avatar
      Rename thread-alive-p to thread-live-p · ac7936cb
      Michael Albinus authored
      * doc/lispref/threads.texi (Basic Thread Functions): Use thread-live-p.
      
      * etc/NEWS: 'thread-alive-p' has been renamed to 'thread-live-p'.
      
      * src/thread.c (thread_live_p): Rename from thread_alive_p.  Adapt
      all callees.
      (Fthread_live_p): Rename from Fthread_alive_p.
      (syms_of_threads): Make thread-alive-p an alias of thread-live-p.
      
      * test/src/thread-tests.el (all): Replace `thread-alive-p' by
      `thread-live-p'.
      (threads-live): Rename from `threads-alive'.
      ac7936cb
  4. 12 Jul, 2018 1 commit
    • Michael Albinus's avatar
      Provide feature 'threads · 3744fda5
      Michael Albinus authored
      * src/thread.c (syms_of_threads): Provide feature "threads".
      
      * test/src/thread-tests.el (top): Declare the functions.
      (all): Use (featurep 'threads) check.
      3744fda5
  5. 01 Jan, 2018 1 commit
  6. 24 Nov, 2017 3 commits
  7. 13 Nov, 2017 1 commit
    • Paul Eggert's avatar
      Use alignas to fix GCALIGN-related bugs · b1573a97
      Paul Eggert authored
      Use alignas and unions to specify alignments of objects needing
      addresses that are at least a multiple of GCALIGNMENT.  Using
      these standard C facilities should be safer than relying on ad hoc
      and poorly-understood features like GCC’s __attribute__
      ((aligned (N))), the root cause for recent porting bugs like
      Bug#29040.  The alignas macro was standardized by C11 and Gnulib
      supports alignas for pre-C11 platforms.  I have tested this on Sun
      Studio 12 sparc (2007) and GCC 4.4.7 x86-64 (2012) as well as on
      more recent platforms like GCC 7.2.1 (2017) on Fedora 26 (both
      x86-64 and x86).
      * lib-src/make-docfile.c (close_emacs_globals): lispsym is now
      just an array of struct Lisp_Symbol, since struct Lisp_Symbol is
      now properly aligned.  All uses changed.
      * src/alloc.c (NEXT_FREE_LISP_STRING): Just use the new u.next
      member; this is simpler and safer than casting a pointer that
      might not be aligned properly.
      (aligned_Lisp_Symbol): Remove.  No longer needed, now that struct
      Lisp_Symbol is aligned properly.  All uses replaced with struct
      Lisp_Symbol.
      * src/lisp.h (GCALIGNED): Remove, as it does not work as expected:
      it can cause the natural alignment to be ignored.  All uses
      replaced by unions with a ‘char alignas (GCALIGNMENT)’ member as
      described below.
      (struct Lisp_Symbol, struct Lisp_Cons, struct Lisp_String):
      Change definition from ‘struct TAG { MEMBERS };’ to
      ‘struct TAG { union { struct { MEMBERS } s; char alignas
      (GCALIGNMENT) gcaligned; } u; };’.  This guarantees ‘struct TAG’
      to have an alignment that at least max (GCALIGNMENT, N) where N is
      its old alignment.  All uses like ‘PTR->MEMBER’ changed to
      ‘PTR->u.s.MEMBER’; these uses were supposed to be mostly private
      anyway.  Verify that the resulting ‘struct TAG’ is properly
      aligned for Emacs.
      (union vectorlike_header): New member ‘gcaligned’ to guarantee
      that this type, and its containing types like ‘struct Lisp_Subr’,
      ‘struct buffer’ and ‘struct thread_state’, are all properly
      aligned for Emacs.
      (struct Lisp_String): New union member ‘next’, for the benefit
      of NEXT_FREE_LISP_STRING.
      (union Aligned_Cons, union Aligned_String): Remove.  All uses
      replaced by struct Lisp_Cons and struct Lisp_String, since they
      are now properly aligned.
      (USE_STACK_CONS, USE_STACK_STRING): Simplify now that we can
      assume struct Lisp_Cons and struct Lisp_String are properly
      aligned.
      b1573a97
  8. 09 Nov, 2017 1 commit
    • Paul Eggert's avatar
      Use GCALIGNED properly for GCC · 9e59de94
      Paul Eggert authored
      Apparently GCC requires that ‘__attribute__ ((aligned (8)))’ must
      immediately follow the ‘struct’ keyword when aligning a structure.
      The attribute silently does not work if it follows a tag after the
      ‘struct’ keyword.  Who knew?  Anyway, this patch is designed to
      fix a SIGSEGV problem reported by John Mastro (Bug#29183).
      * lib-src/make-docfile.c (close_emacs_globals):
      * src/buffer.c (buffer_defaults, buffer_local_symbols):
      * src/lisp.h (DEFUN):
      * src/thread.c (main_thread):
      Put 'GCALIGNED' immediately after 'struct'.
      9e59de94
  9. 02 Nov, 2017 1 commit
    • Paul Eggert's avatar
      Fix alignment portability problems · 6b08ad52
      Paul Eggert authored
      Do not assume that the natural alignment of Lisp objects is a
      multiple of GCALIGNMENT.  This improves on the portability of the
      recent fix for Bug#29040.
      * lib-src/make-docfile.c (close_emacs_globals):
      * src/buffer.c (buffer_defaults, buffer_local_symbols):
      * src/lisp.h (DEFUN):
      * src/thread.c (main_thread):
      Use GCALIGNED, not alignas (GCALIGNMENT).
      * src/alloc.c (COMMON_MULTIPLE):
      Move back here from lisp.h, since it is no longer used elsewhere.
      * src/lisp.h (GCALIGNMENT): No longer a macro, since we need not
      worry about MSVC.  Omit no-longer-needed consistency check.
      * src/thread.c (THREAD_ALIGNMENT): Remove.
      6b08ad52
  10. 28 Oct, 2017 1 commit
    • Eli Zaretskii's avatar
      Avoid segfaults in 64-bit Windows builds · 00c3c6d8
      Eli Zaretskii authored
      * src/lisp.h (COMMON_MULTIPLE): Move here from alloc.c.
      * src/thread.c (THREAD_ALIGNMENT): New macro.
      (main_thread): Use THREAD_ALIGNMENT to align propertly.  (Bug#29040)
      00c3c6d8
  11. 27 Oct, 2017 1 commit
    • Paul Eggert's avatar
      Port thread.c to OpenBSD ARM · 015f0bb2
      Paul Eggert authored
      Problem reported by Jeremie Courreges-Anglas (Bug#29005).
      * src/thread.c (main_thread): Align to GCALIGNMENT.
      015f0bb2
  12. 18 Oct, 2017 1 commit
    • Eli Zaretskii's avatar
      Fix the MSDOS build. · 2f7163fb
      Eli Zaretskii authored
      * msdos/sed1v2.inp (GETADDRINFO_A_LIBS, LIBLCMS2, XDBE_LIBS)
      (XDBE_FLAGS, HYBRID_MALLOC, LIBSYSTEMD_CFLAGS)
      (LIBSYSTEMD_LIBS): Edit to empty.
      (LIBRESOLV, DEPFLAGS, MKDEPDIR, YMF_PASS_LDFLAGS)
      (PRE_EDIT_LDFLAGS, POST_EDIT_LDFLAGS): Remove editing.
      Remove editing of lines that are no longer present in
      src/Makefile.in.
      * msdos/sed2v2.inp (NEED_MKTIME_INTERNAL)
      (NEED_MKTIME_WORKING): Define to 1.
      (HAVE_STRUCT_DIRENT_D_TYPE): Define to 1 for
      DJGPP >= 2.05.
      (HAVE_STRUCT_ATTRIBUTE_ALIGNED): Define to 1.
      Define PACKAGE_VERSION, not VERSION.
      (FLEXIBLE_ARRAY_MEMBER): Define to empty.
      (HAVE_DECL_*_UNLOCKED): Define to 0.
      (HAVE___BUILTIN_FRAME_ADDRESS): Define to 1.
      (PENDING_*): Don't define, as Gnulib no longer supports that.
      Instead, define _IOERR as it is in libc/file.h.
      * msdos/sed3v2.inp: Use $(CURDIR) instead of $(shell cd) to
      determine the current directory.
      (UPDATE_MANIFEST, UTILITIES): Don't edit.
      * msdos/sedlisp.inp (FIND_DELETE): Edit to "-delete".
      * msdos/sedlibmk.inp (AUTO_DEPEND): Define to yes.
      (HYBRID_MALLOC): Edit to empty.
      (am__cd): Don't edit.
      (../config.status): Replaces $(top_builddir)/config.status.
      Define OMIT_GNULIB_MODULE_foo = true for modules not built for
      MS-DOS.  Convert GL_GENERATE_xxx_H_TRUE and
      GL_GENERATE_xxx_H_FALSE into values of GL_GENERATE_xxx_H.
      * msdos/mainmake.v2 (src): Use 'compile-one-process', and make
      the command line shorter to fit into 126-char limit of
      command.com.
      * config.bat: Generate src/deps/*.d files.  Rename more files
      like djtar on plain DOS would.
      Don't rename src/dir.h: it is long gone.  Edit
      lib/gnulib.mk.in using the same scripts as for
      lib/Makefile.in.
      * msdos/depfiles.bat: Create *.d files, not *.Po.
      
      * src/thread.c (Fmake_thread) [!THREADS_ENABLED]: Improve the
      error message.
      * src/thread.h [MSDOS]: Include <signal.h>.
      * src/sysselect.h (select) [MSDOS]: Undefine, to avoid
      compilation errors.
      * src/sysdep.c (block_interrupt_signal, restore_signal_mask):
      Expose to MSDOS build.
      * src/process.c (update_processes_for_thread_death)
      [!subprocess]: No-op implementation.
      [HAVE_SETRLIMIT]: Move inclusion of sys/resource.h and
      declaration of nofile_limit outside "#ifdef subprocesses", as
      it's needed for MSDOS.
      * src/msdos.c (faccessat): Declare fullname[].
      * src/msdos.h (ENOTSUP): Define to be identical to ENOSYS.
      Include termhooks.h.
      * src/conf_post.h [WINDOWSNT]: Include ms-w32.h only on
      WINDOWSNT, not DOS_NT.
      
      * admin/admin.el (set-version): Set version on PACKAGE_VERSION.
      2f7163fb
  13. 04 Oct, 2017 1 commit
    • Eli Zaretskii's avatar
      Avoid crashes on C-g when several threads wait for input · ea39d470
      Eli Zaretskii authored
      * src/thread.h (m_getcjmp): New member of 'struct thread_state'.
      (getcjmp): Define to current thread's 'm_getcjmp'.
      * src/thread.c (maybe_reacquire_global_lock): Switch to main
      thread, since this is called from a SIGINT handler, which always
      runs in the context of the main thread.
      * src/lisp.h (sys_jmp_buf, sys_setjmp, sys_longjmp): Move the
      definitions before thread.h is included, as thread.h now uses
      sys_jmp_buf.
      * src/keyboard.c (getcjmp): Remove declaration.
      (read_char): Don't call maybe_reacquire_global_lock here.
      (handle_interrupt): Call maybe_reacquire_global_lock here, if
      invoked from the SIGINT handler, to make sure
      quit_throw_to_read_char runs with main thread's Lisp bindings and
      uses the main thread's jmp_buf buffer.  (Bug#28630)
      ea39d470
  14. 13 Sep, 2017 1 commit
    • Paul Eggert's avatar
      Prefer HTTPS to FTP and HTTP in documentation · bc511a64
      Paul Eggert authored
      Most of this change is to boilerplate commentary such as license URLs.
      This change was prompted by ftp://ftp.gnu.org's going-away party,
      planned for November.  Change these FTP URLs to https://ftp.gnu.org
      instead.  Make similar changes for URLs to other organizations moving
      away from FTP.  Also, change HTTP to HTTPS for URLs to gnu.org and
      fsf.org when this works, as this will further help defend against
      man-in-the-middle attacks (for this part I omitted the MS-DOS and
      MS-Windows sources and the test tarballs to keep the workload down).
      HTTPS is not fully working to lists.gnu.org so I left those URLs alone
      for now.
      bc511a64
  15. 14 Jul, 2017 1 commit
    • Paul Eggert's avatar
      Improve stack-overflow heuristic on GNU/Linux · 9dee1c88
      Paul Eggert authored
      Problem reported by Steve Kemp (Bug#27585).
      * src/eval.c (near_C_stack_top): Remove.  All uses replaced
      by current_thread->stack_top.
      (record_in_backtrace): Set current_thread->stack_top.
      This is for when the Lisp interpreter calls itself.
      * src/lread.c (read1): Set current_thread->stack_top.
      This is for recursive s-expression reads.
      * src/print.c (print_object): Set current_thread->stack_top.
      This is for recursive s-expression printing.
      * src/thread.c (mark_one_thread): Get stack top first.
      * src/thread.h (struct thread_state.stack_top): Now void *, not char *.
      9dee1c88
  16. 02 May, 2017 1 commit
  17. 18 Jan, 2017 2 commits
    • Eli Zaretskii's avatar
      Fix a bug with signaling a thread that waits for condvar · 5fefaaa8
      Eli Zaretskii authored
      * src/thread.c (lisp_mutex_lock_for_thread): New function,
      with all the guts of lisp_mutex_lock.
      (lisp_mutex_lock): Call lisp_mutex_lock_for_thread.
      (condition_wait_callback): Don't call post_acquire_global_lock
      before locking the mutex, as that could cause a signaled thread to
      exit prematurely, because the condvar's mutex is recorded to be
      not owned by any thread, and with-mutex wants to unlock it as part
      of unwinding the stack in response to the signal.
      5fefaaa8
    • Eli Zaretskii's avatar
      Rudimentary error handling for non-main threads · 57153260
      Eli Zaretskii authored
      * src/thread.c (last_thread_error): New static variable.
      (syms_of_threads): Staticpro it.
      (record_thread_error, Fthread_last_error): New functions.
      (syms_of_threads): Defsubr Fthread_last_error.
      
      * doc/lispref/threads.texi (Basic Thread Functions): Document
      thread-last-error.
      
      * test/src/thread-tests.el (thread-errors, thread-signal-early)
      (threads-condvar-wait): Test the values returned by
      thread-last-error.
      57153260
  18. 13 Jan, 2017 1 commit
    • Eli Zaretskii's avatar
      Fix a bug in waiting for condition variable · 03e4ab0d
      Eli Zaretskii authored
      * src/thread.c (lisp_mutex_lock, lisp_mutex_unlock)
      (lisp_mutex_unlock_for_wait, condition_wait_callback)
      (condition_notify_callback): Improve commentary.
      (condition_wait_callback): Call post_acquire_global_lock before
      attempting to lock the mutex, to make sure the lock's owner is
      recorded correctly.
      
      * test/src/thread-tests.el (threads-condvar-wait): New test.
      03e4ab0d
  19. 01 Jan, 2017 1 commit
  20. 30 Dec, 2016 1 commit
    • Paul Eggert's avatar
      Rename primary_thread to main_thread · 108ef803
      Paul Eggert authored
      This avoids the confusion of using two different phrases "main thread"
      and "primary thread" internally to mean the same thing.  See:
      http://lists.gnu.org/archive/html/emacs-devel/2016-12/msg01142.html
      * src/thread.c (main_thread): Rename from primary_thread,
      since the new name no longer clashes with main_thread_id
      and Emacs internals normally call this the "main thread".
      (init_main_thread): Rename from init_primary_thread.
      (main_thread_p): Rename from primary_thread_p.
      All uses changed.
      108ef803
  21. 24 Dec, 2016 2 commits
    • Paul Eggert's avatar
      Remove interpreter’s byte stack · a815e5f1
      Paul Eggert authored
      This improves performance overall on my benchmark on x86-64,
      since the interpreted program-counter resides in a machine
      register rather than in RAM.
      * etc/DEBUG, src/.gdbinit: Remove xbytecode GDB command, as there
      is no longer a byte stack to decode.
      * src/bytecode.c (struct byte_stack, byte_stack_list)
      (relocate_byte_stack): Remove.  All uses removed.
      (FETCH): Simplify now that pc is now local (typically, in a
      register) and no longer needs to be relocated.
      (CHECK_RANGE): Remove.  All uses now done inline, in a different way.
      (BYTE_CODE_QUIT): Remove; now done by op_relative_branch.
      (exec_byte_code): Allocate a copy of the function’s bytecode,
      so that there is no problem if GC moves it.
      * src/lisp.h (struct handler): Remove byte_stack member.
      All uses removed.
      * src/thread.c (unmark_threads): Remove.  All uses removed.
      * src/thread.h (struct thread_state): Remove m_byte_stack_list member.
      All uses removed.  m_stack_bottom is now the first non-Lisp field.
      a815e5f1
    • Paul Eggert's avatar
      Use max_align_t instead of void * · e2767bd0
      Paul Eggert authored
      * src/thread.c (run_thread): Don’t assume void * is aligned enough.
      e2767bd0
  22. 23 Dec, 2016 1 commit
  23. 22 Dec, 2016 2 commits
  24. 19 Dec, 2016 1 commit
    • Eli Zaretskii's avatar
      Fix crashes upon C-g on Posix TTY frames · fe3188b1
      Eli Zaretskii authored
      * src/thread.h (struct thread_state): New member not_holding_lock.
      (maybe_reacquire_global_lock): Add prototype.
      * src/thread.c: Include syssignal.h.
      (maybe_reacquire_global_lock): New function.
      (really_call_select): Set the not_holding_lock member of the
      thread state before releasing the lock, and rest it after
      re-acquiring the lock when the select function returns.  Block
      SIGINT while doing this to make sure we are not interrupted on TTY
      frames.
      * src/sysdep.c (block_interrupt_signal, restore_signal_mask): New
      functions.
      * src/syssignal.h (block_interrupt_signal, restore_signal_mask):
      Add prototypes.
      * src/keyboard.c (read_char) [THREADS_ENABLED]: Call
      maybe_reacquire_global_lock.  (Bug#25178)
      fe3188b1
  25. 12 Dec, 2016 2 commits
    • Eli Zaretskii's avatar
      Avoid crashing if a new thread is signaled right away · 825f4dd4
      Eli Zaretskii authored
      * src/thread.c (post_acquire_global_lock): Don't raise the pending
      signal if the thread's handlers were not yet set up, as that will
      cause Emacs to exit with a fatal error.  This can happen if a
      thread is signaled as soon as make-thread returns, before the new
      thread had an opportunity to acquire the global lock, set up the
      handlers, and call the thread function.
      
      * test/src/thread-tests.el (thread-signal-early): New test.
      825f4dd4
    • Eli Zaretskii's avatar
      Fix point motion in cloned buffers · a416e1d6
      Eli Zaretskii authored
      * src/thread.c (post_acquire_global_lock): Call
      set_buffer_internal_2 instead of tricking set_buffer_internal_1
      into resetting the current buffer even if it didn't change.  This
      avoids bug#25165, caused by failing to record the modified values
      of point and mark, because current_buffer was set to NULL.  Also,
      don't bother re-setting the buffer if there was no thread switch,
      as that just wastes cycles.
      * src/buffer.c (set_buffer_internal_2): New function, with most of
      the body of set_buffer_internal_1, but without the test for B
      being identical to the current buffer.
      (set_buffer_internal_1): Call set_buffer_internal_2 if B is not
      identical to the current buffer.
      * src/buffer.h (set_buffer_internal_2): Add prototype.
      
      * test/src/thread-tests.el (thread-sticky-point): New test.
      a416e1d6
  26. 10 Dec, 2016 4 commits
  27. 08 Dec, 2016 1 commit
  28. 05 Dec, 2016 1 commit
  29. 18 Oct, 2013 1 commit