code: func TimeoutHandler(h RequestHandler, timeout time.Duration, msg string) RequestHandler {
  	if timeout <= 0 {
  		return h
  	}
  
  	return func(ctx *RequestCtx) {
  		concurrencyCh := ctx.s.concurrencyCh
  		select {
  		case concurrencyCh <- struct{}{}:
  		default:
  			ctx.Error(msg, StatusTooManyRequests)
  			return
  		}
  
  		ch := ctx.timeoutCh
  		if ch == nil {
  			ch = make(chan struct{}, 1)
  			ctx.timeoutCh = ch
  		}
  		go func() {
  			h(ctx)
  			ch <- struct{}{}
  			<-concurrencyCh
  		}()
  		ctx.timeoutTimer = initTimer(ctx.timeoutTimer, timeout)
  		select {
  		case <-ch:
  		case <-ctx.timeoutTimer.C:
  			ctx.TimeoutError(msg)
  		}
  		stopTimer(ctx.timeoutTimer)
  	}
  }
docs: // TimeoutHandler creates RequestHandler, which returns StatusRequestTimeout
  // error with the given msg to the client if h didn't return during
  // the given duration.
  //
  // The returned handler may return StatusTooManyRequests error with the given
  // msg to the client if there are more than Server.Concurrency concurrent
  // handlers h are running at the moment.