mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-23 17:33:23 +00:00
Fix panic problem in tty driver
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
0d6f6f001c
commit
342bbdc0c4
@ -107,7 +107,7 @@ impl LineDiscipline {
|
|||||||
// Raw mode
|
// Raw mode
|
||||||
if !termios.is_canonical_mode() {
|
if !termios.is_canonical_mode() {
|
||||||
self.read_buffer.lock_irq_disabled().push_overwrite(item);
|
self.read_buffer.lock_irq_disabled().push_overwrite(item);
|
||||||
self.update_readable_state();
|
self.update_readable_state_deferred();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ impl LineDiscipline {
|
|||||||
self.output_char(item, &termios, echo_callback);
|
self.output_char(item, &termios, echo_callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.update_readable_state();
|
self.update_readable_state_deferred();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn may_send_signal_to_foreground(&self, termios: &KernelTermios, item: u8) {
|
fn may_send_signal_to_foreground(&self, termios: &KernelTermios, item: u8) {
|
||||||
@ -173,6 +173,15 @@ impl LineDiscipline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn update_readable_state(&self) {
|
fn update_readable_state(&self) {
|
||||||
|
let buffer = self.read_buffer.lock_irq_disabled();
|
||||||
|
if !buffer.is_empty() {
|
||||||
|
self.pollee.add_events(IoEvents::IN);
|
||||||
|
} else {
|
||||||
|
self.pollee.del_events(IoEvents::IN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update_readable_state_deferred(&self) {
|
||||||
let buffer = self.read_buffer.lock_irq_disabled();
|
let buffer = self.read_buffer.lock_irq_disabled();
|
||||||
let pollee = self.pollee.clone();
|
let pollee = self.pollee.clone();
|
||||||
// add/del events may sleep, so only construct parameters here.
|
// add/del events may sleep, so only construct parameters here.
|
||||||
|
Reference in New Issue
Block a user