fix mem leak in libcontainerd/queue/append
Signed-off-by: yangshukui <yangshukui@huawei.com>
This commit is contained in:
parent
88bddd46d8
commit
5425a5ab84
2 changed files with 39 additions and 0 deletions
|
@ -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
libcontainerd/queue_unix_test.go
Normal file
33
libcontainerd/queue_unix_test.go
Normal file
|
@ -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)
|
||||||
|
}
|
Loading…
Reference in a new issue