• kata namespace


    // setupPersistentNs creates persistent namespace without switchin to it.
    // Note, pid namespaces cannot be persisted.
    func setupPersistentNs(namespaceType nsType) (*namespace, error) {
    
            err := os.MkdirAll(persistentNsDir, 0755)
            if err != nil {
                    return nil, err
            }
    
            // Create an empty file at the mount point.
            nsPath := filepath.Join(persistentNsDir, string(namespaceType))
    
            mountFd, err := os.Create(nsPath)
            if err != nil {
                    return nil, err
            }
            mountFd.Close()
    
            var wg sync.WaitGroup
            wg.Add(1)
    
            go (func() {
                    defer wg.Done()
                    runtime.LockOSThread()
    
                    var origNsFd *os.File
                    origNsPath := getCurrentThreadNSPath(namespaceType)
                    origNsFd, err = os.Open(origNsPath)
                    if err != nil {
                            return
                    }
                    defer origNsFd.Close()
    
                    // Create a new netns on the current thread.
                    err = unix.Unshare(cloneFlagsTable[namespaceType])
                    if err != nil {
                            return
                    }
    
                    // Bind mount the new namespace from the current thread onto the mount point to persist it.
                    err = unix.Mount(getCurrentThreadNSPath(namespaceType), nsPath, "none", unix.MS_BIND, "")
                    if err != nil {
                            return
                    }
    
                    // Switch back to original namespace.
                    if err = unix.Setns(int(origNsFd.Fd()), cloneFlagsTable[namespaceType]); err != nil {
                            return
                    }
    
            })()
            wg.Wait()
    
            if err != nil {
                    unix.Unmount(nsPath, unix.MNT_DETACH)
                    return nil, fmt.Errorf("failed to create namespace: %v", err)
            }
    
            return &namespace{path: nsPath}, nil
    }
  • 相关阅读:
    cocos3.2触摸事件接收顺序
    触摸点是否在按钮矩形内
    scrollview里container拖动显示问题
    cocos2dx 显示对象尺寸
    allocating an object of abstract class
    学习scorllview
    cocos2dx引用计数
    addchild 报错不能添加nil
    有用的宏
    一段SQL
  • 原文地址:https://www.cnblogs.com/dream397/p/14073906.html
Copyright © 2020-2023  润新知