Backport #3527: pop3 POPMail.unique_id hangs for large mailboxes - patch included
http://redmine.ruby-lang.org/issues/show/3527

Author: Karl Baum
Status: Open, Priority: Normal
Category: lib

Calls to unique_id seem to not return for extremely large mailboxes.  I traced this down to the POP3.set_all_uids method.  The current implementation is scanning the list of mails for each unique_id resulting in an N * N operation.  I modified the method a bit to first build a hash and it seems to have fixed the issue:

    def set_all_uids #:nodoc: internal use only (called from POPMail#uidl)
      number_to_mail = @mails.inject({}) { |hash, mail| hash[mail.number] = mail; hash }
      command().uidl.each do |num, uid|
        number_to_mail[num].uid = uid
      end
    end


----------------------------------------
http://redmine.ruby-lang.org