[#41778] [Bug #3515] FreeBSD wrongly raises ECONNRESET on close(2) — Yui NARUSE <redmine@...>

Bug #3515: FreeBSD wrongly raises ECONNRESET on close(2)

12 messages 2010/07/02

[ruby-dev:41788] net/pop.rb による大量の pop

From: Furutanian <furutanian@...>
Date: 2010-07-02 14:13:36 UTC
List: ruby-dev #41788
はじめまして、フルタニアンと申します。

はじめてパッチを投稿します。

先日、4 万通程度のメールを pop しようとしたら、ウンともスンともい
わなくなってしまい、数十分して処理を再開した頃には、pop セッショ
ンが切れてました。

どうやら、uid を結びつける処理がシーケンシャルなのが災いしている
ようです。ハッシュを経由させたら、数秒で終わりました。

4 万通を pop することの是非はともかく、よろしければ、ぜひ追加を
お願いします。

--- pop.rb.org  2009-02-03 14:34:11.000000000 +0900
+++ pop.rb      2010-06-28 16:39:04.000000000 +0900
@@ -568,9 +568,11 @@
    end

    def set_all_uids   #:nodoc: internal use only (called from POPMail#uidl)
+      uids = {}
      command().uidl.each do |num, uid|
-        @mails.find {|m| m.number == num }.uid = uid
+        uids[num] = uid
      end
+      @mails.each {|m| m.uid = uids[m.number] }
    end

  end   # class POP3

=== Mitsuhiro Furuta ===

[EOF]

In This Thread

Prev Next