X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Ftooltalk.c;h=3f24b2eee48afb9cdf38ded52d77b6d8e6888fc7;hb=d6e1aa994e9aa204812e6fee3c7520f40e300325;hp=ac76e22732c0d4913ef483cdf9092250b313637f;hpb=77dcef404dc78635f6ffa8f71a803d2bc7cc8921;p=chise%2Fxemacs-chise.git- diff --git a/src/tooltalk.c b/src/tooltalk.c index ac76e22..3f24b2e 100644 --- a/src/tooltalk.c +++ b/src/tooltalk.c @@ -175,7 +175,7 @@ print_tooltalk_message (Lisp_Object obj, Lisp_Object printcharfun, DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-message", tooltalk_message, mark_tooltalk_message, print_tooltalk_message, - 0, 0, 0, + 0, 0, 0, 0, struct Lisp_Tooltalk_Message); static Lisp_Object @@ -184,7 +184,7 @@ make_tooltalk_message (Tt_message m) Lisp_Object val; struct Lisp_Tooltalk_Message *msg = alloc_lcrecord_type (struct Lisp_Tooltalk_Message, - lrecord_tooltalk_message); + &lrecord_tooltalk_message); msg->m = m; msg->callback = Qnil; @@ -249,7 +249,7 @@ print_tooltalk_pattern (Lisp_Object obj, Lisp_Object printcharfun, DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-pattern", tooltalk_pattern, mark_tooltalk_pattern, print_tooltalk_pattern, - 0, 0, 0, + 0, 0, 0, 0, struct Lisp_Tooltalk_Pattern); static Lisp_Object @@ -257,7 +257,7 @@ make_tooltalk_pattern (Tt_pattern p) { struct Lisp_Tooltalk_Pattern *pat = alloc_lcrecord_type (struct Lisp_Tooltalk_Pattern, - lrecord_tooltalk_pattern); + &lrecord_tooltalk_pattern); Lisp_Object val; pat->p = p; @@ -1256,7 +1256,28 @@ init_tooltalk (void) Lisp_Object lp; Lisp_Object fil; + + /* tt_open() messes with our signal handler flags (at least when no + ttsessions is running on the machine), therefore we save the + actions and restore them after the call */ +#ifdef HAVE_SIGPROCMASK + { + struct sigaction ActSIGQUIT; + struct sigaction ActSIGINT; + struct sigaction ActSIGCHLD; + sigaction (SIGQUIT, NULL, &ActSIGQUIT); + sigaction (SIGINT, NULL, &ActSIGINT); + sigaction (SIGCHLD, NULL, &ActSIGCHLD); +#endif retval = tt_open (); +#ifdef HAVE_SIGPROCMASK + sigaction (SIGQUIT, &ActSIGQUIT, NULL); + sigaction (SIGINT, &ActSIGINT, NULL); + sigaction (SIGCHLD, &ActSIGCHLD, NULL); + } +#endif + + if (tt_ptr_error (retval) != TT_OK) return;