aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoerg <joerg@FreeBSD.org>1998-11-20 01:27:40 +0800
committerjoerg <joerg@FreeBSD.org>1998-11-20 01:27:40 +0800
commit382fd887d8cd0d81b1b1a9993fab3652d76a7f19 (patch)
tree07fb2dc7c9cc7383f4d8e0b151aaf6e964e2154e
parent8da9ed1f93b2aa6a4dfde38a77bd94a692719f32 (diff)
downloadfreebsd-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-aa47
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;