[lxc-devel] [lxd/master] lxd/containers: Adapt to go-lxc Release

stgraber on Github lxc-bot at linuxcontainers.org
Mon Jan 7 21:29:21 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 354 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190107/91bbe4a4/attachment.bin>
-------------- next part --------------
From 5ffb1c503a6a674f9d656feb2c8cc1e629c051bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Mon, 7 Jan 2019 16:09:16 -0500
Subject: [PATCH] lxd/containers: Adapt to go-lxc Release
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/container_lxc.go | 38 ++++++++++++++++++++++++++++++++------
 1 file changed, 32 insertions(+), 6 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 998358b459..6440c69411 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -497,7 +497,7 @@ func containerLXCLoad(s *state.State, args db.ContainerArgs, profiles []api.Prof
 func containerLXCUnload(c *containerLXC) {
 	runtime.SetFinalizer(c, nil)
 	if c.c != nil {
-		lxc.Release(c.c)
+		c.c.Release()
 		c.c = nil
 	}
 }
@@ -918,6 +918,13 @@ func (c *containerLXC) initLXC(config bool) error {
 		return err
 	}
 
+	freeContainer := true
+	defer func() {
+		if freeContainer {
+			cc.Release()
+		}
+	}()
+
 	// Setup logging
 	logfile := c.LogFilePath()
 	err = lxcSetConfigItem(cc, "lxc.log.file", logfile)
@@ -961,7 +968,12 @@ func (c *containerLXC) initLXC(config bool) error {
 	// Allow for lightweight init
 	c.cConfig = config
 	if !config {
+		if c.c != nil {
+			c.c.Release()
+		}
+
 		c.c = cc
+		freeContainer = false
 		return nil
 	}
 
@@ -1756,7 +1768,11 @@ func (c *containerLXC) initLXC(config bool) error {
 		}
 	}
 
+	if c.c != nil {
+		c.c.Release()
+	}
 	c.c = cc
+	freeContainer = false
 
 	return nil
 }
@@ -3684,7 +3700,11 @@ func (c *containerLXC) Rename(newName string) error {
 	c.storage.SetStoragePoolVolumeWritable(&sNew)
 
 	// Invalidate the go-lxc cache
-	c.c = nil
+	if c.c != nil {
+		c.c.Release()
+		c.c = nil
+	}
+
 	c.cConfig = false
 
 	// Update lease files
@@ -3999,7 +4019,10 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 			c.localConfig = oldLocalConfig
 			c.localDevices = oldLocalDevices
 			c.profiles = oldProfiles
-			c.c = nil
+			if c.c != nil {
+				c.c.Release()
+				c.c = nil
+			}
 			c.cConfig = false
 			c.initLXC(true)
 			deviceTaskSchedulerTrigger("container", c.name, "changed")
@@ -4059,7 +4082,10 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 	}
 
 	// Run through initLXC to catch anything we missed
-	c.c = nil
+	if c.c != nil {
+		c.c.Release()
+		c.c = nil
+	}
 	c.cConfig = false
 	err = c.initLXC(true)
 	if err != nil {
@@ -7627,7 +7653,7 @@ func (c *containerLXC) fillNetworkDevice(name string, m types.Device) (types.Dev
 		cname := projectPrefix(c.Project(), c.Name())
 		cc, err := lxc.NewContainer(cname, c.state.OS.LxcPath)
 		if err == nil {
-			defer lxc.Release(cc)
+			defer cc.Release()
 
 			interfaces, err := cc.Interfaces()
 			if err == nil {
@@ -7894,7 +7920,7 @@ func (c *containerLXC) removeNetworkDevice(name string, m types.Device) error {
 	if err != nil {
 		return err
 	}
-	defer lxc.Release(cc)
+	defer cc.Release()
 
 	// Remove the interface from the container
 	err = cc.DetachInterfaceRename(m["name"], hostName)


More information about the lxc-devel mailing list