Browse code

fix mem leak in libcontainerd/queue/append

Signed-off-by: yangshukui <yangshukui@huawei.com>

yangshukui authored on 2017/06/22 17:47:47
Showing 2 changed files
... ...
@@ -27,5 +27,11 @@ func (q *queue) append(id string, f func()) {
27 27
 		}
28 28
 		f()
29 29
 		close(done)
30
+
31
+		q.Lock()
32
+		if q.fns[id] == done {
33
+			delete(q.fns, id)
34
+		}
35
+		q.Unlock()
30 36
 	}()
31 37
 }
32 38
new file mode 100644
... ...
@@ -0,0 +1,33 @@
0
+// +build linux solaris
1
+
2
+package libcontainerd
3
+
4
+import (
5
+	"testing"
6
+	"time"
7
+
8
+	"github.com/stretchr/testify/require"
9
+)
10
+
11
+func TestSerialization(t *testing.T) {
12
+	var (
13
+		q             queue
14
+		serialization = 1
15
+	)
16
+
17
+	q.append("aaa", func() {
18
+		//simulate a long time task
19
+		time.Sleep(10 * time.Millisecond)
20
+		require.EqualValues(t, serialization, 1)
21
+		serialization = 2
22
+	})
23
+	q.append("aaa", func() {
24
+		require.EqualValues(t, serialization, 2)
25
+		serialization = 3
26
+	})
27
+	q.append("aaa", func() {
28
+		require.EqualValues(t, serialization, 3)
29
+		serialization = 4
30
+	})
31
+	time.Sleep(20 * time.Millisecond)
32
+}