AddPoolHook adds a pool hook to the pool.
(hook PoolHook)
| 453 | |
| 454 | // AddPoolHook adds a pool hook to the pool. |
| 455 | func (p *ConnPool) AddPoolHook(hook PoolHook) { |
| 456 | // Lock-free read of current manager |
| 457 | manager := p.hookManager.Load() |
| 458 | if manager == nil { |
| 459 | p.initializeHooks() |
| 460 | manager = p.hookManager.Load() |
| 461 | } |
| 462 | |
| 463 | // Create new manager with added hook |
| 464 | newManager := manager.Clone() |
| 465 | newManager.AddHook(hook) |
| 466 | |
| 467 | // Atomically swap to new manager |
| 468 | p.hookManager.Store(newManager) |
| 469 | } |
| 470 | |
| 471 | // RemovePoolHook removes a pool hook from the pool. |
| 472 | func (p *ConnPool) RemovePoolHook(hook PoolHook) { |