Add SIGWINCH signal and functionality in tty and support in PM.
This commit is contained in:
parent
f1d9413da7
commit
8c4166ee85
@ -646,7 +646,7 @@ message *m_ptr; /* pointer to message sent to task */
|
|||||||
case TIOCSWINSZ:
|
case TIOCSWINSZ:
|
||||||
r = sys_vircopy( m_ptr->PROC_NR, D, (vir_bytes) m_ptr->ADDRESS,
|
r = sys_vircopy( m_ptr->PROC_NR, D, (vir_bytes) m_ptr->ADDRESS,
|
||||||
SELF, D, (vir_bytes) &tp->tty_winsize, (vir_bytes) size);
|
SELF, D, (vir_bytes) &tp->tty_winsize, (vir_bytes) size);
|
||||||
/* SIGWINCH... */
|
sigchar(tp, SIGWINCH);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if ENABLE_SRCCOMPAT
|
#if ENABLE_SRCCOMPAT
|
||||||
|
@ -25,8 +25,6 @@ typedef unsigned long sigset_t;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define _NSIG 20 /* number of signals used */
|
|
||||||
|
|
||||||
#define SIGHUP 1 /* hangup */
|
#define SIGHUP 1 /* hangup */
|
||||||
#define SIGINT 2 /* interrupt (DEL) */
|
#define SIGINT 2 /* interrupt (DEL) */
|
||||||
#define SIGQUIT 3 /* quit (ASCII FS) */
|
#define SIGQUIT 3 /* quit (ASCII FS) */
|
||||||
@ -55,6 +53,11 @@ typedef unsigned long sigset_t;
|
|||||||
#define SIGKSIG 19 /* kernel signal pending */
|
#define SIGKSIG 19 /* kernel signal pending */
|
||||||
#define SIGKSTOP 20 /* kernel shutting down */
|
#define SIGKSTOP 20 /* kernel shutting down */
|
||||||
|
|
||||||
|
/* Regular signals. */
|
||||||
|
#define SIGWINCH 21 /* window size has changed */
|
||||||
|
|
||||||
|
#define _NSIG 21 /* number of signals used */
|
||||||
|
|
||||||
/* POSIX requires the following signals to be defined, even if they are
|
/* POSIX requires the following signals to be defined, even if they are
|
||||||
* not supported. Here are the definitions, but they are not supported.
|
* not supported. Here are the definitions, but they are not supported.
|
||||||
*/
|
*/
|
||||||
|
@ -154,7 +154,7 @@ PRIVATE void pm_init()
|
|||||||
register struct boot_image *ip;
|
register struct boot_image *ip;
|
||||||
static char core_sigs[] = { SIGQUIT, SIGILL, SIGTRAP, SIGABRT,
|
static char core_sigs[] = { SIGQUIT, SIGILL, SIGTRAP, SIGABRT,
|
||||||
SIGEMT, SIGFPE, SIGUSR1, SIGSEGV, SIGUSR2 };
|
SIGEMT, SIGFPE, SIGUSR1, SIGSEGV, SIGUSR2 };
|
||||||
static char ign_sigs[] = { SIGCHLD };
|
static char ign_sigs[] = { SIGCHLD, SIGWINCH };
|
||||||
register struct mproc *rmp;
|
register struct mproc *rmp;
|
||||||
register char *sig_ptr;
|
register char *sig_ptr;
|
||||||
phys_clicks total_clicks, minix_clicks, free_clicks;
|
phys_clicks total_clicks, minix_clicks, free_clicks;
|
||||||
|
@ -244,15 +244,16 @@ sigset_t sig_map;
|
|||||||
/* Check each bit in turn to see if a signal is to be sent. Unlike
|
/* Check each bit in turn to see if a signal is to be sent. Unlike
|
||||||
* kill(), the kernel may collect several unrelated signals for a
|
* kill(), the kernel may collect several unrelated signals for a
|
||||||
* process and pass them to PM in one blow. Thus loop on the bit
|
* process and pass them to PM in one blow. Thus loop on the bit
|
||||||
* map. For SIGINT and SIGQUIT, use proc_id 0 to indicate a broadcast
|
* map. For SIGINT, SIGWINCH and SIGQUIT, use proc_id 0 to indicate
|
||||||
* to the recipient's process group. For SIGKILL, use proc_id -1 to
|
* a broadcast to the recipient's process group. For SIGKILL, use
|
||||||
* indicate a systemwide broadcast.
|
* proc_id -1 to indicate a systemwide broadcast.
|
||||||
*/
|
*/
|
||||||
for (i = 1; i <= _NSIG; i++) {
|
for (i = 1; i <= _NSIG; i++) {
|
||||||
if (!sigismember(&sig_map, i)) continue;
|
if (!sigismember(&sig_map, i)) continue;
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case SIGINT:
|
case SIGINT:
|
||||||
case SIGQUIT:
|
case SIGQUIT:
|
||||||
|
case SIGWINCH:
|
||||||
id = 0; break; /* broadcast to process group */
|
id = 0; break; /* broadcast to process group */
|
||||||
case SIGKILL:
|
case SIGKILL:
|
||||||
id = -1; break; /* broadcast to all except INIT */
|
id = -1; break; /* broadcast to all except INIT */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user