code: func (m *TryMutex) Lock() {
  	//log.Debug("TryMutex: lock")
  	ctx := m.LockCtx
  	if ctx == nil {
  		ctx = m.ctx
  	}
  	if err := m.mtx.Lock(ctx); err != nil {
  		log.Debugf("TryMutex: lock err: %v", err)
  		if err != context.Canceled && err != context.DeadlineExceeded {
  			log.Panicf("TryMutex: lock panic: %v", err)
  		}
  	}
  }
docs: // Lock locks m. If the lock is already in use, the calling goroutine blocks
  // until the mutex is available.