diff --git a/purge.inc b/purge.inc
index 70b132b..2e9117b 100644
--- a/purge.inc
+++ b/purge.inc
@@ -121,49 +113,46 @@ function purge_issue_requests_curl($purges) {
   // Initialise a curl_multi object
   $curl_purges = curl_multi_init();
   $current_curl_purge = 0;
-  foreach ($purges as $purge) {
-    $curl_purge[$current_curl_purge] = curl_init();
-    curl_setopt($curl_purge[$current_curl_purge], CURLOPT_CUSTOMREQUEST, $purge['request_method']);
-    curl_setopt($curl_purge[$current_curl_purge], CURLOPT_URL, $purge['purge_url']);
-    curl_setopt($curl_purge[$current_curl_purge], CURLOPT_HEADER, 1);
-    curl_setopt($curl_purge[$current_curl_purge], CURLOPT_HTTPHEADER, $purge['headers']);
-    curl_setopt($curl_purge[$current_curl_purge], CURLOPT_RETURNTRANSFER, 0);
-    curl_multi_add_handle($curl_purges, $curl_purge[$current_curl_purge]);
-    $current_curl_purge++;
+  foreach ($purges as $i => $purge) {
+    $curl_purge[$i] = curl_init();
+    curl_setopt($curl_purge[$i], CURLOPT_CUSTOMREQUEST, $purge['request_method']);
+    curl_setopt($curl_purge[$i], CURLOPT_URL, $purge['purge_url']);
+    curl_setopt($curl_purge[$i], CURLOPT_HEADER, 1);
+    curl_setopt($curl_purge[$i], CURLOPT_HTTPHEADER, $purge['headers']);
+    curl_setopt($curl_purge[$i], CURLOPT_RETURNTRANSFER, 0);
+    curl_multi_add_handle($curl_purges, $curl_purge[$i]);
   }
   // Execute the purge requests
+
   ob_start();
+  $active = 0;
   do {
-    // This loop is only necessary for libcurl earlier than 7.20.0, however
-    // RHEL 5 has just that. Otherwise a simple call would do.
-    do {
-      $multi_result = curl_multi_exec($curl_purges, $active);
-    } while ($multi_result == CURLM_CALL_MULTI_PERFORM);
-    // Block until there is activity on any of the handlers. Avoids
-    // busywaiting.
-    if ($multi_result == CURLM_OK) {
-      $select_result = curl_multi_select($curl_purges);
-    }
-    if ($multi_result != CURLM_OK || $select_result == -1) {
-    // @TODO: error handling. Something truly awkward happened.
-    return FALSE;
-    }
-  } while ($select_result != -1 && $active && $multi_result == CURLM_OK);
+    $multi_result = curl_multi_exec($curl_purges, $active);
+  } while ($active);
+
+// https://bugs.php.net/bug.php?id=61141
+  $select_result = curl_multi_select($curl_purges, 1.0);
+  if ($select_result == -1) {
+    usleep(100000); // Sleep for 0.1 seconds
+  }
+
+  do {
+    $multi_result = curl_multi_exec($curl_purges, $active); 
+  } while ( ($multi_result == CURLM_CALL_MULTI_PERFORM) || 
+          (($active) && ($multi_result == CURLM_OK)) );
   ob_end_clean();
 
   // Result collection. Collects the http code returned for each url purged
   $current_curl_purge = 0;
-  foreach ($purges as $purge) {
-    $info = curl_getinfo($curl_purge[$current_curl_purge]);
-    $purges[$current_curl_purge]['http_code'] = $info['http_code'];
-    curl_multi_remove_handle($curl_purges, $curl_purge[$current_curl_purge]);
-    $current_curl_purge++;
+  foreach ($purges as $i => $purge) {
+    $info = curl_getinfo($curl_purge[$i]);
+    $purges[$i]['http_code'] = $info['http_code'];
+    curl_multi_remove_handle($curl_purges, $curl_purge[$i]);
   }
   curl_multi_close($curl_purges);
   return $purges;
 }
 
-
 /**
  * Logs successful purges and errors to the watchdog.
  *