1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-29 17:41:15 +03:00

Fix PubSub panic on concurrent Close.

This commit is contained in:
Leonid Shagabutdinov
2015-11-26 17:04:26 +02:00
committed by Vladimir Mihailenco
parent f9e280505c
commit 62ce552959
2 changed files with 31 additions and 6 deletions

View File

@ -235,8 +235,11 @@ var _ = Describe("PubSub", func() {
Expect(err).NotTo(HaveOccurred())
defer pubsub.Close()
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer GinkgoRecover()
defer wg.Done()
time.Sleep(readTimeout + 100*time.Millisecond)
n, err := client.Publish("mychannel", "hello").Result()
@ -248,6 +251,8 @@ var _ = Describe("PubSub", func() {
Expect(err).NotTo(HaveOccurred())
Expect(msg.Channel).To(Equal("mychannel"))
Expect(msg.Payload).To(Equal("hello"))
wg.Wait()
})
It("should reconnect on ReceiveMessage error", func() {
@ -281,4 +286,24 @@ var _ = Describe("PubSub", func() {
wg.Wait()
})
It("should not panic on Close", func() {
pubsub, err := client.Subscribe("mychannel")
Expect(err).NotTo(HaveOccurred())
defer pubsub.Close()
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer GinkgoRecover()
wg.Done()
_, err := pubsub.ReceiveMessage()
Expect(err).To(MatchError("redis: client is closed"))
}()
wg.Wait()
err = pubsub.Close()
Expect(err).NotTo(HaveOccurred())
})
})