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.
This commit is contained in:
Joerg Wunsch 1998-11-19 17:27:40 +00:00
parent f1c47d5ebd
commit 5315068bcf
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=14691

View File

@ -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;