andygrunwald / andygrunwald/go-jira
Data racing
- 主要言語
- Go
- スター
- 1.6k
- フォーク
- 500
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
## Describe the bug
Data racing has in this package.
## To Reproduce
This is my `main.go`:
```go
package main
import (
"crypto/tls"
"fmt"
"net/http"
"github.com/andygrunwald/go-jira"
)
func main() {
tp := jira.BasicAuthTransport{
Username: "my_login",
Password: "my_password",
Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}},
}
client, err := jira.NewClient(tp.Client(), "https://jira.host.ru/")
if err != nil {
panic(err)
}
jql := "my_jql_query_here"
result, resp, err := client.Issue.Search(jql, &jira.SearchOptions{})
if err != nil {
panic(err)
}
if resp.StatusCode != 200 {
panic("Not 200 response")
}
fmt.Println("count:", len(result))
}
```
Start in terminal:
```bash
go run ./
count: 17
```
Start in terminal with enable data race detection:
```bash
go run -race ./
objc[93412]: Attempt to use unknown class 0x7ff851c57260.
SIGABRT: abort
PC=0x7ff81040fdfe m=0 sigcode=0
goroutine 0 [idle]:
runtime: unknown pc 0x7ff81040fdfe
stack: frame={sp:0x7ff7bfefe648, fp:0x0} stack=[0x7ff7bfe806d8,0x7ff7bfeff740)
00007ff7bfefe548: 0000000000000002 0000000000000002
00007ff7bfefe558: 00000000021c7000 00000000021c7400
00007ff7bfefe568: 0000000000000006 00007ff7bfefe5d0
00007ff7bfefe578: 00007ff810245619 0000000000000000
00007ff7bfefe588: f6b58000c0001006 000000000000ffff
00007ff7bfefe598: 0000000000000030 0000000000000000
00007ff7bfefe5a8: 000000000000002d 000000000000002d
00007ff7bfefe5b8: 0000000000000000 00000000021c7000
00007ff7bfefe5c8: 00007ff851c6b000 00007ff7bfefe600
00007ff7bfefe5d8: 00007ff810245546 00007ff81024550e
00007ff7bfefe5e8: 000000000000002d 0000000000000001
00007ff7bfefe5f8: 00007ff851c6b000 00007ff7bfefe640
00007ff7bfefe608: 00007ff810261ad6 000000000000002c
00007ff7bfefe618: 000000000000002d 0000600003300000
00007ff7bfefe628: 0000000000000003 0000600002c00000
00007ff7bfefe638: 0000000000000000 00007ff7bfefe670
00007ff7bfefe648: <00007ff810411893 0000000000000000
00007ff7bfefe658: 00000020bfefe6b0 0000600002c00000
00007ff7bfefe668: 00007ff7bfefe6b0 0000600003300000
00007ff7bfefe678: 0000000000000003 0000000000000080
00007ff7bfefe688: 0000000000000001 00007ff7bfefe6a0
00007ff7bfefe698: 00007ff810411843 00007ff7bfefe6e0
00007ff7bfefe6a8: 00007ff8102ddbce 0000600002c00080
00007ff7bfefe6b8: 0000000008c2b033 0000600002c00000
00007ff7bfefe6c8: 00007ffffffffff8 00007ff851c57260
00007ff7bfefe6d8: 0000000080080001 00007ff7bfefe7c0
00007ff7bfefe6e8: 00007ff8102ddb5c 0000003000000010
00007ff7bfefe6f8: 00007ff7bfefe7d0 00007ff7bfefe710
00007ff7bfefe708: 00007ff89b0b1b30 00007ff89b0bb4c8
00007ff7bfefe718: 00007ff851c57260 00007ff851c57260
00007ff7bfefe728: 0000000000000001 00000000ffffffff
00007ff7bfefe738: 0000000000000000 00007ff89b0b1e58
runtime: unknown pc 0x7ff81040fdfe
stack: frame={sp:0x7ff7bfefe648, fp:0x0} stack=[0x7ff7bfe806d8,0x7ff7bfeff740)
00007ff7bfefe548: 0000000000000002 0000000000000002
00007ff7bfefe558: 00000000021c7000 00000000021c7400
00007ff7bfefe568: 0000000000000006 00007ff7bfefe5d0
00007ff7bfefe578: 00007ff810245619 0000000000000000
00007ff7bfefe588: f6b58000c0001006 000000000000ffff
00007ff7bfefe598: 0000000000000030 0000000000000000
00007ff7bfefe5a8: 000000000000002d 000000000000002d
00007ff7bfefe5b8: 0000000000000000 00000000021c7000
00007ff7bfefe5c8: 00007ff851c6b000 00007ff7bfefe600
00007ff7bfefe5d8: 00007ff810245546 00007ff81024550e
00007ff7bfefe5e8: 000000000000002d 0000000000000001
00007ff7bfefe5f8: 00007ff851c6b000 00007ff7bfefe640
00007ff7bfefe608: 00007ff810261ad6 000000000000002c
00007ff7bfefe618: 000000000000002d 0000600003300000
00007ff7bfefe628: 0000000000000003 0000600002c00000
00007ff7bfefe638: 0000000000000000 00007ff7bfefe670
00007ff7bfefe648: <00007ff810411893 0000000000000000
00007ff7bfefe658: 00000020bfefe6b0 0000600002c00000
00007ff7bfefe668: 00007ff7bfefe6b0 0000600003300000
00007ff7bfefe678: 0000000000000003 0000000000000080
00007ff7bfefe688: 0000000000000001 00007ff7bfefe6a0
00007ff7bfefe698: 00007ff810411843 00007ff7bfefe6e0
00007ff7bfefe6a8: 00007ff8102ddbce 0000600002c00080
00007ff7bfefe6b8: 0000000008c2b033 0000600002c00000
00007ff7bfefe6c8: 00007ffffffffff8 00007ff851c57260
00007ff7bfefe6d8: 0000000080080001 00007ff7bfefe7c0
00007ff7bfefe6e8: 00007ff8102ddb5c 0000003000000010
00007ff7bfefe6f8: 00007ff7bfefe7d0 00007ff7bfefe710
00007ff7bfefe708: 00007ff89b0b1b30 00007ff89b0bb4c8
00007ff7bfefe718: 00007ff851c57260 00007ff851c57260
00007ff7bfefe728: 0000000000000001 00000000ffffffff
00007ff7bfefe738: 0000000000000000 00007ff89b0b1e58
goroutine 6 [syscall]:
runtime.cgocall(0x1001800, 0xc00005ece0, 0xc0000100e0)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/runtime/cgocall.go:133 +0x7a fp=0xc00005ecb0 sp=0xc00005ec78 pc=0x104547a
net._C2func_getaddrinfo(0xc000018340, 0x0, 0xc00007af60, 0xc0000100e0, 0xc000000000, 0x0, 0x0)
_cgo_gotypes.go:100 +0x73 fp=0xc00005ece0 sp=0xc00005ecb0 pc=0x126faf3
net.cgoLookupIPCNAME.func1(0xc000018340, 0x11, 0x11, 0xc00007af60, 0xc0000100e0, 0xc00004b5f8, 0x12728bf, 0x1507420)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/cgo_unix.go:161 +0xd3 fp=0xc00005ed40 sp=0xc00005ece0 pc=0x1274d13
net.cgoLookupIPCNAME(0x1495658, 0x3, 0xc000018300, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/cgo_unix.go:161 +0x259 fp=0xc00005ef18 sp=0xc00005ed40 pc=0x1271439
net.cgoIPLookup(0xc000026540, 0x1495658, 0x3, 0xc000018300, 0x10)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/cgo_unix.go:218 +0x7d fp=0xc00005efb8 sp=0xc00005ef18 pc=0x1271f1d
runtime.goexit()
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc00005efc0 sp=0xc00005efb8 pc=0x10ad4c1
created by net.cgoLookupIP
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/cgo_unix.go:228 +0xde
goroutine 1 [select]:
net/http.(*Transport).getConn(0xc00013c280, 0xc00012c280, 0x0, 0xc00001e140, 0x5, 0xc000018300, 0x14, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/transport.go:1350 +0x9be
net/http.(*Transport).roundTrip(0xc00013c280, 0xc000150100, 0xc0000160f0, 0xc00013a780, 0xc000012de0)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/transport.go:569 +0xaed
net/http.(*Transport).RoundTrip(0xc00013c280, 0xc000150100, 0x8, 0x1496f6b, 0xb)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/roundtrip.go:17 +0x47
github.com/andygrunwald/go-jira.(*BasicAuthTransport).RoundTrip(0xc00007acc0, 0xc000150000, 0xc00007acc0, 0x0, 0x0)
/Users/user/go/pkg/mod/github.com/andygrunwald/go-jira@v1.14.0/jira.go:366 +0x109
net/http.send(0xc000150000, 0x15023e0, 0xc00007acc0, 0x0, 0x0, 0x0, 0x108f2c0, 0x0, 0xc00010d5d0, 0x108f4a5)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/client.go:252 +0x6db
net/http.(*Client).send(0xc00007acf0, 0xc000150000, 0x0, 0x0, 0x0, 0xc0000100c8, 0x0, 0x1, 0x149793d)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/client.go:176 +0x1d6
net/http.(*Client).do(0xc00007acf0, 0xc000150000, 0x0, 0x0, 0x0)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/client.go:718 +0x2d8
net/http.(*Client).Do(0xc00007acf0, 0xc000150000, 0x0, 0xc00007adb0, 0x30)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/client.go:586 +0x47
github.com/andygrunwald/go-jira.(*Client).Do(0xc00014e000, 0xc000150000, 0x1424b40, 0xc00007adb0, 0x0, 0x0, 0x0)
/Users/user/go/pkg/mod/github.com/andygrunwald/go-jira@v1.14.0/jira.go:277 +0x95
github.com/andygrunwald/go-jira.(*IssueService).SearchWithContext(0xc000010028, 0x1507460, 0xc0000140c0, 0x1497ac3, 0xd, 0xc00010df30, 0xc000010048, 0xc00014e040, 0xc000010040, 0xc00014e038, ...)
/Users/user/go/pkg/mod/github.com/andygrunwald/go-jira@v1.14.0/issue.go:1096 +0x27f
github.com/andygrunwald/go-jira.(*IssueService).Search(0xc000010028, 0x1497ac3, 0xd, 0xc00010df30, 0xc00014e000, 0x0, 0x0, 0x14959ec, 0x5, 0x14ad2a0)
/Users/user/go/pkg/mod/github.com/andygrunwald/go-jira@v1.14.0/issue.go:1105 +0xa5
main.main()
/Users/user/sandbox/go-jira/main.go:26 +0x385
goroutine 4 [select]:
net.(*Resolver).lookupIPAddr(0x16daae0, 0x1507460, 0xc0000140c0, 0x1495658, 0x3, 0xc000018300, 0x10, 0x1bb, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/lookup.go:299 +0x8cc
net.(*Resolver).internetAddrList(0x16daae0, 0x1507460, 0xc0000140c0, 0x1495658, 0x3, 0xc000018300, 0x14, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/ipsock.go:280 +0x6dc
net.(*Resolver).resolveAddrList(0x16daae0, 0x1507460, 0xc0000140c0, 0x14957c9, 0x4, 0x1495658, 0x3, 0xc000018300, 0x14, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/dial.go:221 +0x5af
net.(*Dialer).DialContext(0x16db0a0, 0x1507460, 0xc0000140c0, 0x1495658, 0x3, 0xc000018300, 0x14, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/dial.go:403 +0x319
net/http.(*Transport).dial(0xc00013c280, 0x1507460, 0xc0000140c0, 0x1495658, 0x3, 0xc000018300, 0x14, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/transport.go:1153 +0x249
net/http.(*Transport).dialConn(0xc00013c280, 0x1507460, 0xc0000140c0, 0x0, 0xc00001e140, 0x5, 0xc000018300, 0x14, 0x0, 0xc000120b40, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/transport.go:1582 +0x2b7f
net/http.(*Transport).dialConnFor(0xc00013c280, 0xc0001302c0)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/transport.go:1424 +0x152
created by net/http.(*Transport).queueForDial
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/http/transport.go:1393 +0x6b0
goroutine 5 [select]:
net.cgoLookupIP(0x1507420, 0xc00012c2c0, 0x1495658, 0x3, 0xc000018300, 0x10, 0x0, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/cgo_unix.go:229 +0x1e9
net.(*Resolver).lookupIP(0x16daae0, 0x1507420, 0xc00012c2c0, 0x1495658, 0x3, 0xc000018300, 0x10, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/lookup_unix.go:96 +0x217
net.glob..func1(0x1507420, 0xc00012c2c0, 0xc000012e20, 0x1495658, 0x3, 0xc000018300, 0x10, 0x0, 0x0, 0x0, ...)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/hook.go:23 +0x9f
net.(*Resolver).lookupIPAddr.func1(0x0, 0x0, 0x0, 0x0)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/net/lookup.go:293 +0x162
internal/singleflight.(*Group).doCall(0x16daaf0, 0xc0000781e0, 0xc000018320, 0x14, 0xc00012c300)
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/internal/singleflight/singleflight.go:95 +0x52
created by internal/singleflight.(*Group).DoChan
/usr/local/Cellar/go@1.15/1.15.15/libexec/src/internal/singleflight/singleflight.go:88 +0x4be
rax 0x2000209
rbx 0x80
rcx 0x7ff7bfefe648
rdx 0x0
rdi 0x8
rsi 0x1
rbp 0x7ff7bfefe690
rsp 0x7ff7bfefe648
r8 0x600002c00000
r9 0x80
r10 0x0
r11 0x246
r12 0x0
r13 0x0
r14 0x1
r15 0x8
rip 0x7ff81040fdfe
rflags 0x246
cs 0x7
fs 0x0
gs 0x0
exit status 2
```
## Expected behavior
Start application with key`-race` should not throw panic.
## Possible Solution
Maybe you unsafe use one variable from different goroutines?
## Your Environment
Include as many relevant details about the environment you experienced the problem in
* go-jira version (git tag or sha): `require github.com/andygrunwald/go-jira v1.14.0`
* Go version (`go version`): go1.15.15 darwin/amd64
* Jira version: v8.5.17#805017-sha1:5dff05e:jiranode8dbz
* Jira type (cloud or on-premise): on-premise
* Involved Jira plugins: I don`t have information about plugins
* Operating System and version: Mac OS Monterey, version 12.1 (21C52)
## Additional context
I think this behavior can cause incorrect data to be received on request from Jira API.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。