gosexy / redis

Redis client for Go that maps the full redis command list into equivalent Go functions.
MIT License
167 stars 44 forks source link

Race condition with go1.1.2 and redis-server 2.6.16 #16

Closed xiam closed 11 years ago

xiam commented 11 years ago

There is a race condition with go1.1.2 and redis-server 2.6.16.

Sometimes go test hungs or fails with a SIGSEGV. Session log below.

SIGSEGV: segmentation violation
PC=0x1000
signal arrived during cgo execution

menteslibres.net/gosexy/redis._Cfunc_redisGoroutineReadEvent(0x7fd4dc000990)
    menteslibres.net/gosexy/redis/_test/_cgo_defun.c:187 +0x2f
menteslibres.net/gosexy/redis.func·002()
    menteslibres.net/gosexy/redis/_test/_cgo_gotypes.go:418 +0x27
menteslibres.net/gosexy/redis.(*pollServer).Run(0xc2000840e0)
    /home/reventlov/go/src/menteslibres.net/gosexy/redis/fd.go:123 +0x1ea
created by menteslibres.net/gosexy/redis.newPollServer
    /home/reventlov/go/src/menteslibres.net/gosexy/redis/newpollserver.go:31 +0xcf

goroutine 1 [chan receive]:
testing.RunTests(0x589868, 0x83d540, 0x1e, 0x1e, 0x43ac01, ...)
    /usr/local/go/src/pkg/testing/testing.go:434 +0x88e
testing.Main(0x589868, 0x83d540, 0x1e, 0x1e, 0x83b6a0, ...)
    /usr/local/go/src/pkg/testing/testing.go:365 +0x8a
main.main()
    menteslibres.net/gosexy/redis/_test/_testmain.go:117 +0x9a

goroutine 2 [syscall]:

goroutine 22 [syscall]:
menteslibres.net/gosexy/redis._Cfunc_redisConnectNonBlock(0x7fd4dc0008c0, 0x18eb, 0x7fd4dc0008c0)
    menteslibres.net/gosexy/redis/_test/_cgo_defun.c:115 +0x2f
menteslibres.net/gosexy/redis.(*Client).ConnectNonBlock(0xc2000b8c20, 0x55cbd0, 0x4, 0x5065e0, 0xc2000ade00, ...)
    menteslibres.net/gosexy/redis/_test/_cgo_gotypes.go:537 +0x4d
menteslibres.net/gosexy/redis.TestPSubscriptions(0xc20008cd80)
    /home/reventlov/go/src/menteslibres.net/gosexy/redis/main_test.go:1095 +0x8a
testing.tRunner(0xc20008cd80, 0x83d6c0)
    /usr/local/go/src/pkg/testing/testing.go:353 +0x8a
created by testing.RunTests
    /usr/local/go/src/pkg/testing/testing.go:433 +0x86b
rax     0x1000
rbx     0x7fd4dc000d30
rcx     0x7fd4d8000028
rdx     0x7fd4fa5ed060
rdi     0x7fd4dc000d30
rsi     0x7fd4d80008e0
rbp     0x7fd4dc000e28
rsp     0x7fd4e95d7d48
r8      0x0
r9      0x3a
r10     0x50
r11     0x7fd4f9f71f80
r12     0x7fd4dc000c10
r13     0x7fd4d8000aa8
r14     0x7fd4d8000a40
r15     0x7fd4d80008e0
rip     0x1000
rflags  0x10206
cs      0x33
fs      0x0
gs      0x0
exit status 2
FAIL    menteslibres.net/gosexy/redis   0.057s
xiam commented 11 years ago

Happened due to SUBSCRIBE and PSUBSCRIBE tests using non-blocking connections. Fixed.

xiam commented 11 years ago

https://github.com/gosexy/redis/commit/cccd90c38c9dc6bb9038459ab6da0e15b4c52a8f