1
2
3
4
5
12 package main
13
14 import (
15 "errors"
16 "os"
17 "runtime/pprof"
18 "sync"
19 "time"
20 )
21
22 func init() {
23 register("Moby17176", Moby17176)
24 }
25
26 type DeviceSet_moby17176 struct {
27 sync.Mutex
28 nrDeletedDevices int
29 }
30
31 func (devices *DeviceSet_moby17176) cleanupDeletedDevices() error {
32 devices.Lock()
33 if devices.nrDeletedDevices == 0 {
34
35 return nil
36 }
37 devices.Unlock()
38 return errors.New("Error")
39 }
40
41 func testDevmapperLockReleasedDeviceDeletion_moby17176() {
42 ds := &DeviceSet_moby17176{
43 nrDeletedDevices: 0,
44 }
45 ds.cleanupDeletedDevices()
46 doneChan := make(chan bool)
47 go func() {
48 ds.Lock()
49 defer ds.Unlock()
50 doneChan <- true
51 }()
52
53 select {
54 case <-time.After(time.Millisecond):
55 case <-doneChan:
56 }
57 }
58 func Moby17176() {
59 prof := pprof.Lookup("goroutineleak")
60 defer func() {
61 time.Sleep(100 * time.Millisecond)
62 prof.WriteTo(os.Stdout, 2)
63 }()
64
65 for i := 0; i < 100; i++ {
66 go testDevmapperLockReleasedDeviceDeletion_moby17176()
67 }
68 }
69
View as plain text