summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <joreland@mysql.com>2004-11-03 11:29:19 +0100
committerunknown <joreland@mysql.com>2004-11-03 11:29:19 +0100
commitae56a1baa64d04dc62162d7cfb4c87475772fd78 (patch)
treeb7b31640c899cce40d9741a59abd705651079f5d
parent961805e4dfd4b66f13cc542ec3e85545cf20a822 (diff)
downloadmariadb-git-ae56a1baa64d04dc62162d7cfb4c87475772fd78.tar.gz
Changed implementation in NdbDaemon slightly to handle
bug lockf & F_TEST on linux alpha,sparc,sparc64 (http://sources.redhat.com/ml/libc-alpha/2000-10/msg00390.html)
-rw-r--r--ndb/src/common/portlib/NdbDaemon.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/ndb/src/common/portlib/NdbDaemon.c b/ndb/src/common/portlib/NdbDaemon.c
index c73b5927ff4..3f1c1998501 100644
--- a/ndb/src/common/portlib/NdbDaemon.c
+++ b/ndb/src/common/portlib/NdbDaemon.c
@@ -55,18 +55,21 @@ NdbDaemon_Make(const char* lockfile, const char* logfile, unsigned flags)
"%s: lseek failed: %s", lockfile, strerror(errno));
return -1;
}
+#ifdef F_TLOCK
/* Test for lock before becoming daemon */
- if (lockf(lockfd, F_TEST, 0) == -1) {
- if (errno == EACCES || errno == EAGAIN) { /* results may vary */
+ if (lockf(lockfd, F_TLOCK, 0) == -1)
+ {
+ if (errno == EACCES || errno == EAGAIN) { /* results may vary */
snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
- "%s: already locked by pid=%ld", lockfile, NdbDaemon_DaemonPid);
+ "%s: already locked by pid=%ld", lockfile, NdbDaemon_DaemonPid);
return -1;
}
NdbDaemon_ErrorCode = errno;
snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
- "%s: lock test failed: %s", lockfile, strerror(errno));
+ "%s: lock test failed: %s", lockfile, strerror(errno));
return -1;
}
+#endif
/* Test open log file before becoming daemon */
if (logfile != NULL) {
logfd = open(logfile, O_CREAT|O_WRONLY|O_APPEND, 0644);
@@ -77,6 +80,15 @@ NdbDaemon_Make(const char* lockfile, const char* logfile, unsigned flags)
return -1;
}
}
+#ifdef F_TLOCK
+ if (lockf(lockfd, F_ULOCK, 0) == -1)
+ {
+ snprintf(NdbDaemon_ErrorText, NdbDaemon_ErrorSize,
+ "%s: fail to unlock", lockfile);
+ return -1;
+ }
+#endif
+
/* Fork */
n = fork();
if (n == -1) {