| 133 | impl ConsoleEpollHandler { |
| 134 | #[allow(clippy::too_many_arguments)] |
| 135 | fn new( |
| 136 | mem: GuestMemoryAtomic<GuestMemoryMmap>, |
| 137 | input_queue: Queue, |
| 138 | output_queue: Queue, |
| 139 | interrupt_cb: Arc<dyn VirtioInterrupt>, |
| 140 | in_buffer: Arc<Mutex<VecDeque<u8>>>, |
| 141 | resizer: Arc<ConsoleResizer>, |
| 142 | endpoint: Endpoint, |
| 143 | input_queue_evt: EventFd, |
| 144 | output_queue_evt: EventFd, |
| 145 | config_evt: EventFd, |
| 146 | resize_pipe: Option<File>, |
| 147 | kill_evt: EventFd, |
| 148 | pause_evt: EventFd, |
| 149 | access_platform: Option<Arc<dyn AccessPlatform>>, |
| 150 | ) -> Self { |
| 151 | let out_file = endpoint.out_file(); |
| 152 | let (out, write_out) = if let Some(out_file) = out_file { |
| 153 | let writer = out_file.try_clone().unwrap(); |
| 154 | if endpoint.is_pty() { |
| 155 | let pty_write_out = Arc::new(AtomicBool::new(false)); |
| 156 | let write_out = Some(pty_write_out.clone()); |
| 157 | let buffer = SerialBuffer::new(Box::new(writer), pty_write_out); |
| 158 | (Some(Box::new(buffer) as Box<dyn Write + Send>), write_out) |
| 159 | } else { |
| 160 | (Some(Box::new(writer) as Box<dyn Write + Send>), None) |
| 161 | } |
| 162 | } else { |
| 163 | (None, None) |
| 164 | }; |
| 165 | |
| 166 | ConsoleEpollHandler { |
| 167 | mem, |
| 168 | input_queue, |
| 169 | output_queue, |
| 170 | interrupt_cb, |
| 171 | in_buffer, |
| 172 | resizer, |
| 173 | endpoint, |
| 174 | input_queue_evt, |
| 175 | output_queue_evt, |
| 176 | config_evt, |
| 177 | resize_pipe, |
| 178 | kill_evt, |
| 179 | pause_evt, |
| 180 | access_platform, |
| 181 | out, |
| 182 | write_out, |
| 183 | file_event_registered: false, |
| 184 | } |
| 185 | } |
| 186 | |
| 187 | /* |
| 188 | * Each port of virtio console device has one receive |