diff --git a/CHANGES b/CHANGES
index 6ed90c02cc312a93d2d6b9bc5b24580ef43972c0..3d2979a5135fb97771dde9f533c5c114a0c69a27 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,10 @@
 
                                   Changelog
 
+Guenter Knauf (11 Sep 2009)
+- Joshua Kwan provided a patch to pass POLLERR / POLLHUP back to c-ares.
+  This fixes a loop problem with high CPU usage.
+
 Daniel Stenberg (10 Sep 2009)
 - Claes Jakobsson fixed a problem with cookie expiry dates at exctly the epoch
   start second "Thu Jan 1 00:00:00 GMT 1970" as the date parser then returns 0
diff --git a/lib/hostares.c b/lib/hostares.c
index 1412f13a6a80415c1e072438a5eb2864ecf96047..efecd86bd87966f79aa608b793e3cb0b9cb60d22 100644
--- a/lib/hostares.c
+++ b/lib/hostares.c
@@ -169,10 +169,14 @@ static int ares_waitperform(struct connectdata *conn, int timeout_ms)
   else {
     /* move through the descriptors and ask for processing on them */
     for(i=0; i < num; i++)
+      /*
+       * Following the advice from:
+       * http://lists.danga.com/pipermail/memcached/2003-October/000336.html
+       */
       ares_process_fd(data->state.areschannel,
-                      pfd[i].revents & (POLLRDNORM|POLLIN)?
+                      pfd[i].revents & (POLLRDNORM|POLLIN|POLLERR|POLLHUP)?
                       pfd[i].fd:ARES_SOCKET_BAD,
-                      pfd[i].revents & (POLLWRNORM|POLLOUT)?
+                      pfd[i].revents & (POLLWRNORM|POLLOUT|POLLERR)?
                       pfd[i].fd:ARES_SOCKET_BAD);
   }
   return nfds;