| 1087 | } |
| 1088 | |
| 1089 | fn stop_uffd_handler(&mut self) { |
| 1090 | if let Some(uffd_handler) = self.uffd_handler.take() { |
| 1091 | uffd_handler.stop_event.write(1).ok(); |
| 1092 | uffd_handler.handle.join().ok(); |
| 1093 | |
| 1094 | match uffd_handler.result_rx.try_recv() { |
| 1095 | Ok(Err(e)) => error!("UFFD handler terminated with error: {e}"), |
| 1096 | Err(mpsc::TryRecvError::Disconnected) => { |
| 1097 | warn!("UFFD handler terminated unexpectedly (possible panic)"); |
| 1098 | } |
| 1099 | _ => {} |
| 1100 | } |
| 1101 | } |
| 1102 | } |
| 1103 | |
| 1104 | /// Poll the UFFD fd and serve page faults from the snapshot file. |
| 1105 | /// |