summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorJoerg Wunsch <joerg@FreeBSD.org>1998-11-19 17:27:40 +0000
committerJoerg Wunsch <joerg@FreeBSD.org>1998-11-19 17:27:40 +0000
commit5315068bcff700d2daff57376ea4f32041f2c73d (patch)
tree73986265c0bf968844a6247512b47e9e83086691 /net
parentActivate gtkfig. (diff)
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.
Notes
Notes: svn path=/head/; revision=14691
Diffstat (limited to 'net')
-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;