]> 127.0.0.1 Git - part/.git/commitdiff
1 v0.28.20240102141717
authorqydysky <qydysky@foxmail.com>
Tue, 2 Jan 2024 14:14:11 +0000 (22:14 +0800)
committerqydysky <qydysky@foxmail.com>
Tue, 2 Jan 2024 14:14:11 +0000 (22:14 +0800)
sync/RWMutex.go
sync/RWMutex_test.go

index e2f0ed306a58d16d4af3662fd6a841d074b86f82..61b676ea6079e1a169dfe3cab90c335e9a7e7e0c 100644 (file)
@@ -114,7 +114,7 @@ func (m *RWMutex) RLock(to ...time.Duration) (unlockf func(beforeUlock ...func()
                        panic("had unlock")
                }
                if done != nil {
-                       done()
+                       defer done()
                }
                if m.read.Add(-1) == 0 {
                        for i := 0; i < len(beforeUlock); i++ {
@@ -144,7 +144,7 @@ func (m *RWMutex) Lock(to ...time.Duration) (unlockf func(beforeUlock ...func())
                        panic("had unlock")
                }
                if done != nil {
-                       done()
+                       defer done()
                }
                for i := 0; i < len(beforeUlock); i++ {
                        beforeUlock[i]()
index 008eab67fb6c1150141c9633378130553f627cc0..7f4f3ffbfbfbf0d604a546a9b041008dd4e7805d 100644 (file)
@@ -116,6 +116,14 @@ func Test7(t *testing.T) {
        }
 }
 
+func Panic_Test8(t *testing.T) {
+       var l RWMutex
+       ul := l.Lock(time.Second, time.Second)
+       ul(func() {
+               time.Sleep(time.Second * 10)
+       })
+}
+
 // ulock rlock rlock
 func Panic_Test4(t *testing.T) {
        var l RWMutex