()
| 139 | } |
| 140 | |
| 141 | func (sm *StatusManager) Close() error { |
| 142 | if sm.closed.Load() { |
| 143 | return sm.loadCloseErr() |
| 144 | } |
| 145 | |
| 146 | if !sm.closing.CompareAndSwap(false, true) { |
| 147 | <-sm.closedCh |
| 148 | return sm.loadCloseErr() |
| 149 | } |
| 150 | |
| 151 | err := sm.close() |
| 152 | sm.setCloseErr(err) |
| 153 | sm.closed.Store(true) |
| 154 | close(sm.closedCh) |
| 155 | |
| 156 | return err |
| 157 | } |
| 158 | |
| 159 | func (sm *StatusManager) close() error { |
| 160 | sm.cancel() |