annotate src/sighandlers.h @ 2554:f7e3d23f0a8f

[project @ 1996-11-21 01:41:57 by jwe]
author jwe
date Thu, 21 Nov 1996 01:43:06 +0000
parents f201716926bb
children f4d0604cbcc4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2
1884
e62277bf5fe0 [project @ 1996-02-05 18:17:59 by jwe]
jwe
parents: 1651
diff changeset
3 Copyright (C) 1996 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
4
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
10 later version.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
11
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
15 for more details.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1009
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
20
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22
834
44ce29d8cb7b [project @ 1994-10-19 18:17:44 by jwe]
jwe
parents: 383
diff changeset
23 // This file should always be included after config.h!
44ce29d8cb7b [project @ 1994-10-19 18:17:44 by jwe]
jwe
parents: 383
diff changeset
24
383
0b52c68ec81f [project @ 1994-03-09 21:19:44 by jwe]
jwe
parents: 296
diff changeset
25 #if !defined (octave_sighandlers_h)
0b52c68ec81f [project @ 1994-03-09 21:19:44 by jwe]
jwe
parents: 296
diff changeset
26 #define octave_sighandlers_h 1
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
27
2209
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
28 #include <Array.h>
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
29
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
30 #include "syswait.h"
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
31
290
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
32 // Signal handler return type.
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
33 #ifndef RETSIGTYPE
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
34 #define RETSIGTYPE void
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
35 #endif
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
36 #ifndef BADSIG
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
37 #define BADSIG (RETSIGTYPE (*)(int))-1
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
38 #endif
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
39
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
40 typedef RETSIGTYPE sig_handler (int);
5325afdb0ef5 [project @ 1994-01-13 19:21:40 by jwe]
jwe
parents: 240
diff changeset
41
2554
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
42 // All we need to do is declare pointers to this, so we don't need to
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
43 // have the whole declaration here.
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
44
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
45 struct octave_interrupt_handler;
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
46
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
47 // Nonzero means we have already printed a message for this series of
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
48 // SIGPIPES. We assume that the writer will eventually give up.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
49 extern int pipe_handler_error_count;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
50
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
51 // Nonzero means we can be interrupted.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
52 extern int can_interrupt;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
53
1443
cd6c9be7337c [project @ 1995-09-19 21:54:56 by jwe]
jwe
parents: 1315
diff changeset
54 extern sig_handler *octave_set_signal_handler (int, sig_handler *);
cd6c9be7337c [project @ 1995-09-19 21:54:56 by jwe]
jwe
parents: 1315
diff changeset
55
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
56 extern void install_signal_handlers (void);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
57
2554
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
58 extern void octave_catch_interrupts (void);
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
59
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
60 extern octave_interrupt_handler *octave_ignore_interrupts (void);
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
61
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
62 extern octave_interrupt_handler *
f7e3d23f0a8f [project @ 1996-11-21 01:41:57 by jwe]
jwe
parents: 2469
diff changeset
63 octave_set_interrupt_handler (const volatile octave_interrupt_handler *);
1651
e846e361a265 [project @ 1995-12-20 06:59:12 by jwe]
jwe
parents: 1445
diff changeset
64
2016
6f3428b0d2c7 [project @ 1996-03-22 09:48:38 by jwe]
jwe
parents: 1996
diff changeset
65 extern void octave_save_signal_mask (void);
6f3428b0d2c7 [project @ 1996-03-22 09:48:38 by jwe]
jwe
parents: 1996
diff changeset
66
6f3428b0d2c7 [project @ 1996-03-22 09:48:38 by jwe]
jwe
parents: 1996
diff changeset
67 extern void octave_restore_signal_mask (void);
6f3428b0d2c7 [project @ 1996-03-22 09:48:38 by jwe]
jwe
parents: 1996
diff changeset
68
2214
b5c7309168f3 [project @ 1996-05-16 15:48:22 by jwe]
jwe
parents: 2209
diff changeset
69 // extern void ignore_sigchld (void);
b5c7309168f3 [project @ 1996-05-16 15:48:22 by jwe]
jwe
parents: 2209
diff changeset
70
834
44ce29d8cb7b [project @ 1994-10-19 18:17:44 by jwe]
jwe
parents: 383
diff changeset
71 // This is taken directly from Emacs 19:
44ce29d8cb7b [project @ 1994-10-19 18:17:44 by jwe]
jwe
parents: 383
diff changeset
72
839
b8530da02bb7 [project @ 1994-10-19 21:44:00 by jwe]
jwe
parents: 834
diff changeset
73 #ifndef SYS_SIGLIST_DECLARED
b8530da02bb7 [project @ 1994-10-19 21:44:00 by jwe]
jwe
parents: 834
diff changeset
74 extern char *sys_siglist[];
834
44ce29d8cb7b [project @ 1994-10-19 18:17:44 by jwe]
jwe
parents: 383
diff changeset
75 #endif
44ce29d8cb7b [project @ 1994-10-19 18:17:44 by jwe]
jwe
parents: 383
diff changeset
76
2209
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
77 // Maybe this should be in a separate file?
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
78
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
79 class
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
80 octave_child
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
81 {
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
82 public:
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
83
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
84 typedef void (*dead_child_handler) (pid_t, int);
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
85
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
86 octave_child (pid_t id = -1, dead_child_handler f = 0)
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
87 : pid (id), handler (f) { }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
88
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
89 octave_child (const octave_child& oc)
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
90 : pid (oc.pid), handler (oc.handler) { }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
91
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
92 octave_child& operator = (const octave_child& oc)
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
93 {
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
94 if (&oc != this)
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
95 {
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
96 pid = oc.pid;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
97 handler = oc.handler;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
98 }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
99 return *this;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
100 }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
101
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
102 ~octave_child (void) { }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
103
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
104 // The process id of this child.
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
105 pid_t pid;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
106
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
107 // The function we call if this child dies.
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
108 dead_child_handler handler;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
109 };
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
110
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
111 class
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
112 octave_child_list
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
113 {
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
114 protected:
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
115
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
116 octave_child_list (void) : list (0), curr_len (0) { }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
117
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
118 public:
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
119
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
120 ~octave_child_list (void) { }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
121
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
122 static void insert (pid_t pid, octave_child::dead_child_handler f);
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
123
2214
b5c7309168f3 [project @ 1996-05-16 15:48:22 by jwe]
jwe
parents: 2209
diff changeset
124 static void remove (pid_t pid);
b5c7309168f3 [project @ 1996-05-16 15:48:22 by jwe]
jwe
parents: 2209
diff changeset
125
2209
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
126 static int length (void) { return instance ? instance->curr_len : 0; }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
127
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
128 static octave_child& elem (int i)
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
129 {
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
130 static octave_child foo;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
131
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
132 if (instance)
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
133 {
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
134 int n = length ();
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
135
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
136 if (i >= 0 && i < n)
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
137 return instance->list (i);
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
138 }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
139
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
140 return foo;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
141 }
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
142
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
143 private:
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
144
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
145 Array<octave_child> list;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
146
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
147 int curr_len;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
148
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
149 static octave_child_list *instance;
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
150
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
151 void do_insert (pid_t pid, octave_child::dead_child_handler f);
2214
b5c7309168f3 [project @ 1996-05-16 15:48:22 by jwe]
jwe
parents: 2209
diff changeset
152
b5c7309168f3 [project @ 1996-05-16 15:48:22 by jwe]
jwe
parents: 2209
diff changeset
153 void do_remove (pid_t pid);
2209
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
154 };
859030f15706 [project @ 1996-05-15 11:46:43 by jwe]
jwe
parents: 2016
diff changeset
155
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
156 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
157
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
158 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
159 ;;; Local Variables: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
160 ;;; mode: C++ ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
161 ;;; End: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
162 */