emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/keyboard.c [emacs-unicode-2]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/src/keyboard.c [emacs-unicode-2]
Date: Wed, 08 Dec 2004 00:47:54 -0500

Index: emacs/src/keyboard.c
diff -c emacs/src/keyboard.c:1.753.2.14 emacs/src/keyboard.c:1.753.2.15
*** emacs/src/keyboard.c:1.753.2.14     Fri Nov 19 06:54:59 2004
--- emacs/src/keyboard.c        Wed Dec  8 05:02:20 2004
***************
*** 45,50 ****
--- 45,53 ----
  #include <setjmp.h>
  #include <errno.h>
  
+ #ifdef HAVE_GTK_AND_PTHREAD
+ #include <pthread.h>
+ #endif
  #ifdef MSDOS
  #include "msdos.h"
  #include <time.h>
***************
*** 607,613 ****
  
  /* We are unable to use interrupts if FIONREAD is not available,
     so flush SIGIO so we won't try.  */
! #if !defined (FIONREAD) || defined(HAVE_CARBON)
  #ifdef SIGIO
  #undef SIGIO
  #endif
--- 610,616 ----
  
  /* We are unable to use interrupts if FIONREAD is not available,
     so flush SIGIO so we won't try.  */
! #if !defined (FIONREAD)
  #ifdef SIGIO
  #undef SIGIO
  #endif
***************
*** 1618,1624 ****
--- 1621,1630 ----
        if (NILP (Vthis_command))
        {
          /* nil means key is undefined.  */
+         Lisp_Object keys = Fvector (i, keybuf);
+         keys = Fkey_description (keys, Qnil);
          bitch_at_user ();
+         message_with_string ("%s is undefined", keys, 0);
          current_kboard->defining_kbd_macro = Qnil;
          update_mode_lines = 1;
          current_kboard->Vprefix_arg = Qnil;
***************
*** 6773,6778 ****
--- 6779,6803 ----
  #ifdef BSD4_1
    extern int select_alarmed;
  #endif
+ #if ! defined (SYSTEM_MALLOC) && defined (HAVE_GTK_AND_PTHREAD)
+   extern pthread_t main_thread;
+   if (pthread_self () != main_thread)
+     {
+       /* POSIX says any thread can receive the signal.  On GNU/Linux that is
+          not true, but for other systems (FreeBSD at least) it is.  So direct
+          the signal to the correct thread and block it from this thread.  */
+ #ifdef SIGIO
+       sigset_t new_mask;
+ 
+       sigemptyset (&new_mask);
+       sigaddset (&new_mask, SIGIO);
+       pthread_sigmask (SIG_BLOCK, &new_mask, 0);
+       pthread_kill (main_thread, SIGIO);
+ #endif
+       return;
+     }
+ #endif
+ 
    interrupt_input_pending = 0;
  
    while (1)
***************
*** 6800,6806 ****
  {
    /* Must preserve main program's value of errno.  */
    int old_errno = errno;
! 
  #if defined (USG) && !defined (POSIX_SIGNALS)
    /* USG systems forget handlers when they are used;
       must reestablish each time */
--- 6825,6846 ----
  {
    /* Must preserve main program's value of errno.  */
    int old_errno = errno;
! #if ! defined (SYSTEM_MALLOC) && defined (HAVE_GTK_AND_PTHREAD)
!   extern pthread_t main_thread;
!   if (pthread_self () != main_thread)
!     {
!       /* POSIX says any thread can receive the signal.  On GNU/Linux that is
!          not true, but for other systems (FreeBSD at least) it is.  So direct
!          the signal to the correct thread and block it from this thread.  */
!       sigset_t new_mask;
! 
!       sigemptyset (&new_mask);
!       sigaddset (&new_mask, SIGIO);
!       pthread_sigmask (SIG_BLOCK, &new_mask, 0);
!       pthread_kill (main_thread, SIGIO);
!       return;
!     }
! #endif /* HAVE_GTK_AND_PTHREAD */
  #if defined (USG) && !defined (POSIX_SIGNALS)
    /* USG systems forget handlers when they are used;
       must reestablish each time */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]