Explorar o código

Merge pull request #33764 from keloyang/fix-queue-mem-leak

Fix mem leak in libcontainerd/queue/append
Sebastiaan van Stijn %!s(int64=8) %!d(string=hai) anos
pai
achega
f88626b270
Modificáronse 2 ficheiros con 39 adicións e 0 borrados
  1. 6 0
      libcontainerd/queue_unix.go
  2. 33 0
      libcontainerd/queue_unix_test.go

+ 6 - 0
libcontainerd/queue_unix.go

@@ -27,5 +27,11 @@ func (q *queue) append(id string, f func()) {
 		}
 		}
 		f()
 		f()
 		close(done)
 		close(done)
+
+		q.Lock()
+		if q.fns[id] == done {
+			delete(q.fns, id)
+		}
+		q.Unlock()
 	}()
 	}()
 }
 }

+ 33 - 0
libcontainerd/queue_unix_test.go

@@ -0,0 +1,33 @@
+// +build linux solaris
+
+package libcontainerd
+
+import (
+	"testing"
+	"time"
+
+	"github.com/stretchr/testify/require"
+)
+
+func TestSerialization(t *testing.T) {
+	var (
+		q             queue
+		serialization = 1
+	)
+
+	q.append("aaa", func() {
+		//simulate a long time task
+		time.Sleep(10 * time.Millisecond)
+		require.EqualValues(t, serialization, 1)
+		serialization = 2
+	})
+	q.append("aaa", func() {
+		require.EqualValues(t, serialization, 2)
+		serialization = 3
+	})
+	q.append("aaa", func() {
+		require.EqualValues(t, serialization, 3)
+		serialization = 4
+	})
+	time.Sleep(20 * time.Millisecond)
+}