TTY fixes:

- reenable code to restore screen/cursor at shutdown
- add proper signal checking logic
- lock to first console during shutdown
This commit is contained in:
David van Moolenbroek 2009-12-21 23:19:01 +00:00
parent 1f5841c8ed
commit 492d663444
2 changed files with 27 additions and 5 deletions

View file

@ -103,6 +103,8 @@ PRIVATE int nr_cons= 1; /* actual number of consoles */
PRIVATE console_t cons_table[NR_CONS]; PRIVATE console_t cons_table[NR_CONS];
PRIVATE console_t *curcons = NULL; /* currently visible */ PRIVATE console_t *curcons = NULL; /* currently visible */
PRIVATE int shutting_down = FALSE; /* don't allow console switches */
/* Color if using a color controller. */ /* Color if using a color controller. */
#define color (vid_port == C_6845) #define color (vid_port == C_6845)
@ -1228,12 +1230,11 @@ PUBLIC void toggle_scroll()
PUBLIC void cons_stop() PUBLIC void cons_stop()
{ {
/* Prepare for halt or reboot. */ /* Prepare for halt or reboot. */
select_console(0);
#if 0
cons_org0(); cons_org0();
softscroll = 1; softscroll = 1;
select_console(0);
cons_table[0].c_attr = cons_table[0].c_blank = BLANK_COLOR; cons_table[0].c_attr = cons_table[0].c_blank = BLANK_COLOR;
#endif shutting_down = TRUE;
} }
/*===========================================================================* /*===========================================================================*
@ -1298,6 +1299,8 @@ PUBLIC void select_console(int cons_line)
{ {
/* Set the current console to console number 'cons_line'. */ /* Set the current console to console number 'cons_line'. */
if (shutting_down) return;
if (cons_line < 0 || cons_line >= nr_cons) return; if (cons_line < 0 || cons_line >= nr_cons) return;
ccurrent = cons_line; ccurrent = cons_line;

View file

@ -102,6 +102,7 @@ unsigned long rs_irq_set = 0;
struct kmessages kmess; struct kmessages kmess;
FORWARD _PROTOTYPE( void got_signal, (void) );
FORWARD _PROTOTYPE( void tty_timed_out, (timer_t *tp) ); FORWARD _PROTOTYPE( void tty_timed_out, (timer_t *tp) );
FORWARD _PROTOTYPE( void expire_timers, (void) ); FORWARD _PROTOTYPE( void expire_timers, (void) );
FORWARD _PROTOTYPE( void settimer, (tty_t *tty_ptr, int enable) ); FORWARD _PROTOTYPE( void settimer, (tty_t *tty_ptr, int enable) );
@ -219,8 +220,8 @@ PUBLIC int main(void)
expire_timers(); expire_timers();
break; break;
case PM_PROC_NR: case PM_PROC_NR:
/* switch to primary console */ /* signal */
cons_stop(); got_signal();
break; break;
case SYSTEM: case SYSTEM:
/* system signal */ /* system signal */
@ -343,6 +344,24 @@ PRIVATE void sef_local_startup()
sef_startup(); sef_startup();
} }
/*===========================================================================*
* got_signal *
*===========================================================================*/
PRIVATE void got_signal()
{
/* PM notified us that we have received a signal. If it is a SIGTERM, assume
* that the system is shutting down.
*/
sigset_t set;
if (getsigset(&set) != 0) return;
if (!sigismember(&set, SIGTERM)) return;
/* switch to primary console */
cons_stop();
}
/*===========================================================================* /*===========================================================================*
* do_status * * do_status *
*===========================================================================*/ *===========================================================================*/