diff options
author | joerg <joerg@FreeBSD.org> | 1998-11-20 01:27:40 +0800 |
---|---|---|
committer | joerg <joerg@FreeBSD.org> | 1998-11-20 01:27:40 +0800 |
commit | 382fd887d8cd0d81b1b1a9993fab3652d76a7f19 (patch) | |
tree | 07fb2dc7c9cc7383f4d8e0b151aaf6e964e2154e | |
parent | 8da9ed1f93b2aa6a4dfde38a77bd94a692719f32 (diff) | |
download | freebsd-ports-gnome-382fd887d8cd0d81b1b1a9993fab3652d76a7f19.tar.gz freebsd-ports-gnome-382fd887d8cd0d81b1b1a9993fab3652d76a7f19.tar.zst freebsd-ports-gnome-382fd887d8cd0d81b1b1a9993fab3652d76a7f19.zip |
Give up attempting to lock a file unless the resulting error was
`EWOULDBLOCK'. This prevents DeleGate to hang upon writing the
transfer log to stderr when running as an FTP proxy in foreground
(-v) mode.
-rw-r--r-- | net/delegate/files/patch-aa | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/net/delegate/files/patch-aa b/net/delegate/files/patch-aa new file mode 100644 index 000000000000..7232ff8e7894 --- /dev/null +++ b/net/delegate/files/patch-aa @@ -0,0 +1,47 @@ +--- src/lock.c.orig Tue Aug 4 09:13:18 1998 ++++ src/lock.c Thu Nov 19 18:17:09 1998 +@@ -18,6 +18,7 @@ + History: + 970403 extracted from cache.c + //////////////////////////////////////////////////////////////////////#*/ ++#include <errno.h> + #include <stdio.h> + #include <sys/types.h> + extern double Time(); +@@ -112,6 +113,22 @@ + rcode = 0; + break; + } ++#ifdef EWOULDBLOCK ++ /* ++ * Only retry the lock if it was busy. Other ++ * possible sources for the lock to fail are: ++ * invalid argument, bad filedescriptor, and ++ * operation not supported by device. The latter ++ * happens if you start DeleGateD with -v, so it ++ * logs to stderr (which usually doesn't support ++ * locking at all). ++ */ ++ if (rcode == -1 && errno != EWOULDBLOCK) { ++ /* pretend lock succeeded */ ++ rcode = 0; ++ break; ++ } ++#endif + remain = timeout - elapsed; + if( remain <= 0 ) + break; +@@ -122,6 +139,13 @@ + + start = Time(); + rcode = callFuncTimeout(remain/1000,-1,func,fd); ++#ifdef EWOULDBLOCK ++ if (rcode == -1 && errno != EWOULDBLOCK) { ++ /* pretend lock succeeded */ ++ rcode = 0; ++ break; ++ } ++#endif + elapse1 = (Time() - start) * 1000; + /*{ + static int n; |