Use uint32 because uint64 requires manual alignment on 386 arch. Fixes #256.

This commit is contained in:
Vladimir Mihailenco 2016-02-18 12:42:35 +02:00
parent 298fdec445
commit e750d2b7e2
1 changed files with 13 additions and 13 deletions

26
pool.go
View File

@ -17,12 +17,12 @@ var (
// PoolStats contains pool state information and accumulated stats. // PoolStats contains pool state information and accumulated stats.
type PoolStats struct { type PoolStats struct {
Requests uint64 // number of times a connection was requested by the pool Requests uint32 // number of times a connection was requested by the pool
Waits uint64 // number of times our pool had to wait for a connection Waits uint32 // number of times our pool had to wait for a connection
Timeouts uint64 // number of times a wait timeout occurred Timeouts uint32 // number of times a wait timeout occurred
TotalConns uint64 // the number of total connections in the pool TotalConns uint32 // the number of total connections in the pool
FreeConns uint64 // the number of free connections in the pool FreeConns uint32 // the number of free connections in the pool
} }
type pool interface { type pool interface {
@ -237,7 +237,7 @@ func (p *connPool) Get() (cn *conn, isNew bool, err error) {
return return
} }
atomic.AddUint64(&p.stats.Requests, 1) atomic.AddUint32(&p.stats.Requests, 1)
// Fetch first non-idle connection, if available. // Fetch first non-idle connection, if available.
if cn = p.First(); cn != nil { if cn = p.First(); cn != nil {
@ -257,12 +257,12 @@ func (p *connPool) Get() (cn *conn, isNew bool, err error) {
} }
// Otherwise, wait for the available connection. // Otherwise, wait for the available connection.
atomic.AddUint64(&p.stats.Waits, 1) atomic.AddUint32(&p.stats.Waits, 1)
if cn = p.wait(); cn != nil { if cn = p.wait(); cn != nil {
return return
} }
atomic.AddUint64(&p.stats.Timeouts, 1) atomic.AddUint32(&p.stats.Timeouts, 1)
err = errPoolTimeout err = errPoolTimeout
return return
} }
@ -315,11 +315,11 @@ func (p *connPool) FreeLen() int {
func (p *connPool) Stats() *PoolStats { func (p *connPool) Stats() *PoolStats {
stats := p.stats stats := p.stats
stats.Requests = atomic.LoadUint64(&p.stats.Requests) stats.Requests = atomic.LoadUint32(&p.stats.Requests)
stats.Waits = atomic.LoadUint64(&p.stats.Waits) stats.Waits = atomic.LoadUint32(&p.stats.Waits)
stats.Timeouts = atomic.LoadUint64(&p.stats.Timeouts) stats.Timeouts = atomic.LoadUint32(&p.stats.Timeouts)
stats.TotalConns = uint64(p.Len()) stats.TotalConns = uint32(p.Len())
stats.FreeConns = uint64(p.FreeLen()) stats.FreeConns = uint32(p.FreeLen())
return &stats return &stats
} }