annotate tests/sigpipe.c @ 5014:c2e0c3af5fe3

cleanups to debug-print, try harder to make it work during GC -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-02-08 Ben Wing <ben@xemacs.org> * emacs.c: * emacs.c (assert_failed): Fix comments about when inhibit_non_essential_printing_operations is set and how used. Increment/decrement in assert_failed rather than just setting/resetting to avoid hosing things in case we're called when the value is already non-zero. Similarly increment/ decrement in_assert_failed. * gc.c (gc_prepare): * gc.c (gc_finish): Increment/decrement inhibit_non_essential_printing_operations rather than setting/resetting. * print.c: * print.c (debug_out): * print.c (write_string_to_alternate_debugging_output): * print.c (restore_inhibit_non_essential_conversion_operations): * print.c (debug_print_exit): * print.c (debug_print_enter): * print.c (debug_prin1): * print.c (debug_p4): * print.c (ext_print_begin): * print.c (ext_print_end): * print.c (external_debug_print): * print.c (debug_p3): * print.c (debug_backtrace): * print.c (debug_short_backtrace): * print.c (vars_of_print): Lots of cleanup. Fix debug_out() so it binds inhibit_non_essential_printing_operations around it to ensure no conversion. Remove many other places that set the same var since the lower-level functions now all do it. A few other places, add inhibit_non_essential_printing_operations bindings.Extract the code out that sets up and resets lots of bindings in debug_prin1() so that debug_backtrace() can use it, and rewrite it to use the new STORE_VOID_IN_LISP() rather than having to have a single static opaque structure holding all the bindings (and not handling reentrancy). Fix raw `char' to be `CIbyte' in the declaration of `alternate_do_string'. * signal.c (check_what_happened): Fix bug: Don't try to check for QUIT when inhibit_non_essential_printing_operations or we may screw things up if QUIT happens during debug printing.
author Ben Wing <ben@xemacs.org>
date Mon, 08 Feb 2010 07:00:24 -0600
parents 679041362cd4
children 308d34e9f07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1231
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
1 /* code is all from loser.c and loser.el by Mly
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
2
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
3 Copyright (C) 2002 Richard Mlynarik <mly@pobox.com>
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
4
4739
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
5 This file is part of XEmacs.
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
6
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
8 under the terms of the GNU General Public License as published by the
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
10 later version.
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
11
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
15 for more details.
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
16
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
17 You should have received a copy of the GNU General Public License
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to the Free
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
19 Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
20 02110-1301, USA.
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
21
679041362cd4 Add permissions notices to sigpipe.c and regressiontest.pl.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 1231
diff changeset
22 Commentary:
1231
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
23
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
24 Compile this file. Run it in the background giving it a command line
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
25 argument PORT which is a positive integer 1024 < PORT < 32768 (avoid the
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
26 numbers assigned in /etc/services).
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
27
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
28 Then start up a fresh (you're going to crash) XEmacs. Execute the following
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
29
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
30 (defun lose (port)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
31 (interactive "nUrk: ")
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
32 (require 'comint)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
33 (while t
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
34 (condition-case e
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
35 (let* ((name "*lose*")
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
36 (b (get-buffer-create name)))
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
37 (switch-to-buffer b)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
38 (comint-mode)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
39 (comint-exec b name (cons "127.0.0.1" port) nil '())
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
40 (process-send-string (get-buffer-process b) "\377\373\001")
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
41 (process-send-string (get-buffer-process b) "\377\373\001"))
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
42 (error (message "URK: %s" e)) (sit-for 1))))
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
43
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
44 Then M-x lose RET PORT RET and you lose big (in XEmacs 21.1, anyway).
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
45 Note: the error messages are proper functioning. What should eventually
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
46 happen after a number of SIGPIPEs is that you get a SIGSEGV and life is
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
47 bad and XEmacs is dead.
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
48 */
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
49
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
50 #include <arpa/inet.h>
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
51
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
52 int
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
53 main (int argc, char **argv)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
54 {
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
55 struct sockaddr_in junk;
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
56 int s;
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
57
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
58 memset (&junk, 0, sizeof (junk));
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
59
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
60 junk.sin_family = AF_INET;
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
61 junk.sin_addr.s_addr = htonl (INADDR_ANY); /* un*x sucks */
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
62 junk.sin_port = htons (atoi (argv[1])); /* un*x blows */
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
63
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
64 s = socket (PF_INET, SOCK_STREAM, 0);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
65
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
66 bind (s, (struct sockaddr *)&junk, sizeof (junk));
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
67
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
68 listen (s, 1);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
69
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
70 for (;;)
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
71 {
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
72 int loser = accept (s, NULL, 0);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
73 close (loser);
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
74 }
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
75 }
3f6adebda25c [xemacs-hg @ 2003-01-23 11:24:08 by stephent]
stephent
parents:
diff changeset
76