# File lib/rubytorrent/controller.rb, line 290
  def received_block(block, peer)
    if @in_endgame
      @peers_m.synchronize { @peers.each { |p| p.cancel block if p.running? && (p != peer)} }
    end
    send_event(:received_block, block, peer.name)

    piece = @package.pieces[block.pindex] # find corresponding piece
    if piece.complete?
      if piece.valid?
        @peers_m.synchronize { @peers.each { |peer| peer.have_piece piece } }
        send_event(:have_piece, piece)
      else
        rt_warning "#{self}: received data for #{piece} does not match SHA1 hash, discarding"
        send_event(:discarded_piece, piece)
        piece.discard
      end
    end
  end