package namespace import ( "fmt" "os" "git.theodohertyfamily.com/tools/wg-wrap/internal/paths" ) // UnpinNamespace removes the pinned namespace file from the filesystem. // This allows the namespace to be destroyed once the last process exits. func UnpinNamespace(pm *paths.PathManager, profile string) error { nsPath := GetProfileNamespacePath(pm, profile) // We only want to unpin if there are no more active processes. // The caller (cli.ExecuteCommand) is responsible for calling this // when IsLastProcess returns true. if _, err := os.Stat(nsPath); os.IsNotExist(err) { return nil } // We also want to remove the pids directory if it's empty. pidsDir := GetPidsDirPath(pm, profile) // Unlink the namespace file if err := os.Remove(nsPath); err != nil { return fmt.Errorf("failed to unpin namespace %s: %w", nsPath, err) } // Try to remove pids directory _ = os.Remove(pidsDir) return nil }