code: func Bind(cleanup func()) {
  	c.sem.Lock()
  	// store in the reverse order
  	s := make([]func(), 0, 1+len(c.cleanups))
  	s = append(s, cleanup)
  	c.cleanups = append(s, c.cleanups...)
  	c.sem.Unlock()
  }
docs: // Bind will register the cleanup function that will be called when closer will get a close request.
  // All the callbacks will be called in the reverse order they were bound, that's similar to how `defer` works.