code: func (m *TryMutex) Unlock() {
  	//log.Debug("TryMutex: unlock")
  	ctx := m.UnlockCtx
  	if ctx == nil {
  		ctx = m.ctx
  	}
  	if err := m.mtx.Unlock(ctx); err != nil {
  		log.Debugf("TryMutex: unlock err: %v", err)
  		if err != context.Canceled && err != context.DeadlineExceeded {
  			log.Panicf("TryMutex: unlock panic: %v", err)
  		}
  	}
  }
docs: // Unlock unlocks m. It is a run-time error if m is not locked on entry to
  // Unlock.
  //
  // A locked TryMutex is not associated with a particular goroutine. It is
  // allowed for one goroutine to lock a Mutex and then arrange for another
  // goroutine to unlock it.