Back out #957240.
diff --git a/Doc/lib/libasyncore.tex b/Doc/lib/libasyncore.tex
index f466fa6..89c7178 100644
--- a/Doc/lib/libasyncore.tex
+++ b/Doc/lib/libasyncore.tex
@@ -44,20 +44,20 @@
 service) is closed.
 
 \begin{funcdesc}{loop}{\optional{timeout\optional{, use_poll\optional{,
-                       map\optional{,count}}}}}
-  Enter a polling loop that terminates after count passes or all open
-  channels have been closed.  All arguments are optional.  The \var(count)
-  parameter defaults to infinity, resulting in the loop terminating only
-  when all channels have been closed.  The \var{timeout} argument sets the
-  timeout parameter for the appropriate \function{select()} or
-  \function{poll()} call, measured in seconds; the default is 30 seconds.
-  The \var{use_poll} parameter, if true, indicates that \function{poll()}
-  should be used in preference to \function{select()} (the default is
-  \code{False}).  The \var{map} parameter is a dictionary whose items are
-  the channels to watch.  As channels are closed they are deleted from their
-  map.  If \var{map} is omitted, a global map is used (this map is updated
-  by the default class \method{__init__()} -- make sure you extend, rather
-  than override, \method{__init__()} if you want to retain this behavior).
+                       map}}}}
+  Enter a polling loop that only terminates after all open channels
+  have been closed.  All arguments are optional.  The \var{timeout}
+  argument sets the timeout parameter for the appropriate
+  \function{select()} or \function{poll()} call, measured in seconds;
+  the default is 30 seconds.  The \var{use_poll} parameter, if true,
+  indicates that \function{poll()} should be used in preference to
+  \function{select()} (the default is \code{False}).  The \var{map} parameter
+  is a dictionary whose items are the channels to watch.  As channels
+  are closed they are deleted from their map.  If \var{map} is
+  omitted, a global map is used (this map is updated by the default
+  class \method{__init__()}
+  -- make sure you extend, rather than override, \method{__init__()}
+  if you want to retain this behavior).
 
   Channels (instances of \class{asyncore.dispatcher}, \class{asynchat.async_chat}
   and subclasses thereof) can freely be mixed in the map.
diff --git a/Lib/asyncore.py b/Lib/asyncore.py
index b687fd2..69318c8 100644
--- a/Lib/asyncore.py
+++ b/Lib/asyncore.py
@@ -157,7 +157,7 @@
 
 poll3 = poll2                           # Alias for backward compatibility
 
-def loop(timeout=30.0, use_poll=False, map=None, count=1e309):
+def loop(timeout=30.0, use_poll=False, map=None):
     if map is None:
         map = socket_map
 
@@ -166,9 +166,8 @@
     else:
         poll_fun = poll
 
-    while map and count >= 0:
+    while map:
         poll_fun(timeout, map)
-        count = count - 1
 
 class dispatcher:
 
diff --git a/Misc/NEWS b/Misc/NEWS
index bf808b5..20a1042 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -349,8 +349,6 @@
 - refactored site.py into functions.  Also wrote regression tests for the
   module.
 
-- asyncore.loop now has repeat count parameter that defaults to infinity.
-
 - The distutils sdist command now ignores all .svn directories, in
   addition to CVS and RCS directories.  .svn directories hold
   administrative files for the Subversion source control system.