--- subversion-1.4.5/subversion/libsvn_subr/io.c.orig	2008-05-27 14:53:33.291201300 +0800
+++ subversion-1.4.5/subversion/libsvn_subr/io.c	2008-05-27 14:56:39.983190300 +0800
@@ -65,7 +65,16 @@
   goes a long way towards minimizing it.  It is not an infinite
   loop because there might really be an error.
 */
-#ifdef WIN32
+#if defined(WIN32) || defined(__CYGWIN__)
+
+#if defined(WIN32)
+#define WIN32_SHOULD_RETRY_ON_ERROR(err) \
+    (err == ERROR_ACCESS_DENIED || err == ERROR_SHARING_VIOLATION)
+#elif defined(__CYGWIN__)
+#define WIN32_SHOULD_RETRY_ON_ERROR(err) \
+    (err == EACCES || err == EPERM)
+#endif
+
 #define WIN32_RETRY_LOOP(err, expr)                                        \
   do                                                                       \
     {                                                                      \
@@ -73,8 +82,7 @@
       int sleep_count = 1000;                                              \
       int retries;                                                         \
       for (retries = 0;                                                    \
-           retries < 100 && (os_err == ERROR_ACCESS_DENIED                 \
-                             || os_err == ERROR_SHARING_VIOLATION);        \
+           retries < 100 && WIN32_SHOULD_RETRY_ON_ERROR(os_err);           \
            ++retries, os_err = APR_TO_OS_ERROR(err))                    \
         {                                                                  \
           apr_sleep(sleep_count);                                       \


