Skip to content

database/sql: data race #9715

Closed
Closed
@bradfitz

Description

@bradfitz

Noticed on freebsd-amd64-race: http://build.golang.org/log/bfca7707a0ccb2dd15e8228eb5b97434c33d1143

WARNING: DATA RACE
Write by goroutine 71:
  database/sql.(*Stmt).Query()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1436 +0x6f3
  database/sql.func·039()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1957 +0x1ea
  testing.func·002()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:418 +0x18f

Previous read by goroutine 61:
  database/sql.(*Stmt).Query()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1435 +0x51f
  database/sql.func·039()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1957 +0x1ea
  testing.func·002()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:418 +0x18f
  runtime.goexit()
      /tmp/buildlet-scatch184358971/go/src/runtime/asm_amd64.s:2430 +0x0
  reflect.ValueOf()
      /tmp/buildlet-scatch184358971/go/src/reflect/value.go:2081 +0xfc
  database/sql/driver.int32Type.ConvertValue()
      /tmp/buildlet-scatch184358971/go/src/database/sql/driver/types.go:108 +0x80
  database/sql/driver.(*int32Type).ConvertValue()
      <autogenerated>:12 +0xf9
  database/sql.driverArgs()
      /tmp/buildlet-scatch184358971/go/src/database/sql/convert.go:68 +0xb3d
  database/sql.resultFromStatement()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1310 +0x372
  database/sql.(*Stmt).Exec()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1289 +0x31c
  database/sql.(*concurrentTxStmtExecTest).test()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1689 +0x1a0
  database/sql.func·035()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1750 +0xe2

Goroutine 71 (running) created at:
  testing.(*B).RunParallel()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:410 +0x46e
  database/sql.BenchmarkManyConcurrentQueries()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1964 +0x496
  testing.(*B).runN()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:124 +0xf2
  testing.(*B).launch()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:216 +0x1d0

Goroutine 61 (running) created at:
  testing.(*B).RunParallel()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:410 +0x46e
  database/sql.BenchmarkManyConcurrentQueries()
      /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1964 +0x496
  testing.(*B).runN()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:124 +0xf2
  testing.(*B).launch()
      /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:216 +0x1d0
==================
unexpected fault address 0x4c9c18
fatal error: fault
[signal 0xa code=0xc addr=0x4c9c18 pc=0x5bb9d8]

goroutine 431 [running]:
runtime.throw(0x44099f, 0x423c28)
    /tmp/buildlet-scatch184358971/go/src/runtime/panic.go:508 +0x98 fp=0x7fffff1f8e78 sp=0x7fffff1f8e60
runtime.goroutineheader(0x423c28)
    /tmp/buildlet-scatch184358971/go/src/runtime/traceback.go:586 +0x1c4 fp=0x7fffff1f8eb0 sp=0x7fffff1f8e78
runtime.dopanic_m(0xc2081377a0, 0x423c28, 0x7fffff1f8e60)
    /tmp/buildlet-scatch184358971/go/src/runtime/panic1.go:96 +0x1ca fp=0x7fffff1f8f08 sp=0x7fffff1f8eb0
runtime.func·045()
    /tmp/buildlet-scatch184358971/go/src/runtime/panic.go:495 +0x43 fp=0x7fffff1f8f28 sp=0x7fffff1f8f08
runtime.systemstack(0xc208013200)
    /tmp/buildlet-scatch184358971/go/src/runtime/asm_amd64.s:244 +0x71 fp=0x7fffff1f8f30 sp=0x7fffff1f8f28
runtime.mstart()
    /tmp/buildlet-scatch184358971/go/src/runtime/proc1.go:735 fp=0x7fffff1f8f38 sp=0x7fffff1f8f30
created by testing.(*B).RunParallel
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:419 +0x46e

goroutine 1 [chan receive]:
testing.(*B).run(0xc20807a200, 0x0, 0x0, 0x0, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:180 +0x91
testing.RunBenchmarks(0x6d1418, 0x784cc0, 0x9, 0x9)
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:312 +0x7ec
testing.(*M).Run(0xc20800a140, 0x7ace40)
    /tmp/buildlet-scatch184358971/go/src/testing/testing.go:495 +0x286
main.main()
    database/sql/_test/_testmain.go:158 +0x28d

goroutine 390 [semacquire]:
sync.runtime_Semacquire(0xc2080b0fcc)
    /tmp/buildlet-scatch184358971/go/src/runtime/sema.go:43 +0x2d
sync.(*Mutex).Lock(0xc2080b0fc8)
    /tmp/buildlet-scatch184358971/go/src/sync/mutex.go:66 +0xfd
database/sql.(*DB).removeDep(0xc2080b0fa0, 0x8007da350, 0xc2081f2000, 0x63bdc0, 0xc208178f00, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:392 +0x5b
database/sql.func·009(0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1438 +0x13e
database/sql.(*Rows).Close(0xc208178f00, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1650 +0x201
database/sql.func·039(0xc2080d4000)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1962 +0x322
testing.func·002()
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:418 +0x190
created by testing.(*B).RunParallel
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:419 +0x46e

goroutine 418 [semacquire]:
sync.runtime_Semacquire(0xc2080b0fcc)
    /tmp/buildlet-scatch184358971/go/src/runtime/sema.go:43 +0x2d
sync.(*Mutex).Lock(0xc2080b0fc8)
    /tmp/buildlet-scatch184358971/go/src/sync/mutex.go:66 +0xfd
database/sql.(*DB).putConn(0xc2080b0fa0, 0xc208069740, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:721 +0x54
database/sql.(*driverConn).releaseConn(0xc208069740, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:258 +0x60
database/sql.*driverConn.(database/sql.releaseConn)·fm(0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:908 +0x49
database/sql.func·009(0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1437 +0x7d
database/sql.(*Rows).Close(0xc2080a7860, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1650 +0x201
database/sql.func·039(0xc2080d4a60)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1962 +0x322
testing.func·002()
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:418 +0x190
created by testing.(*B).RunParallel
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:419 +0x46e

goroutine 340 [semacquire]:
sync.runtime_Semacquire(0xc2080b0fcc)
    /tmp/buildlet-scatch184358971/go/src/runtime/sema.go:43 +0x2d
sync.(*Mutex).Lock(0xc2080b0fc8)
    /tmp/buildlet-scatch184358971/go/src/sync/mutex.go:66 +0xfd
database/sql.(*DB).putConn(0xc2080b0fa0, 0xc208069680, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:721 +0x54
database/sql.(*driverConn).releaseConn(0xc208069680, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:258 +0x60
database/sql.*driverConn.(database/sql.releaseConn)·fm(0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:908 +0x49
database/sql.func·009(0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1437 +0x7d
database/sql.(*Rows).Close(0xc2081e88a0, 0x0, 0x0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql.go:1650 +0x201
database/sql.func·039(0xc2081a41a0)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1962 +0x322
testing.func·002()
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:418 +0x190
created by testing.(*B).RunParallel
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:419 +0x46e

goroutine 205 [semacquire]:
sync.runtime_Semacquire(0xc20802a060)
    /tmp/buildlet-scatch184358971/go/src/runtime/sema.go:43 +0x2d
sync.(*WaitGroup).Wait(0xc20804c600)
    /tmp/buildlet-scatch184358971/go/src/sync/waitgroup.go:132 +0x1e8
testing.(*B).RunParallel(0xc20807a200, 0xc20804c5c0)
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:421 +0x497
database/sql.BenchmarkManyConcurrentQueries(0xc20807a200)
    /tmp/buildlet-scatch184358971/go/src/database/sql/sql_test.go:1964 +0x497
testing.(*B).runN(0xc20807a200, 0x3e8)
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:124 +0xf3
testing.(*B).launch(0xc20807a200)
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:216 +0x1d1
created by testing.(*B).run
    /tmp/buildlet-scatch184358971/go/src/testing/benchmark.go:179 +0x57

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions