Release a GPU assignment. The `GpuBindGuard` is dropped, restoring the GPU.
(&mut self, sandbox_id: &str)
| 116 | |
| 117 | /// Release a GPU assignment. The `GpuBindGuard` is dropped, restoring the GPU. |
| 118 | pub fn release(&mut self, sandbox_id: &str) { |
| 119 | if let Some(slot) = self |
| 120 | .slots |
| 121 | .iter_mut() |
| 122 | .find(|s| s.assigned_to.as_deref() == Some(sandbox_id)) |
| 123 | { |
| 124 | let bdf = slot.info.bdf.clone(); |
| 125 | slot.assigned_to = None; |
| 126 | slot.bind_guard.take(); |
| 127 | self.persist_state(); |
| 128 | tracing::info!(bdf = %bdf, sandbox_id = %sandbox_id, "released GPU assignment"); |
| 129 | } |
| 130 | } |
| 131 | |
| 132 | fn persist_state(&self) { |
| 133 | let bindings: Vec<GpuBinding> = self |