/*
- * Copyright (C) 1994-1998, Index Data I/S
+ * Copyright (C) 1994-1999, Index Data
* All rights reserved.
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: lockidx.c,v $
- * Revision 1.14 1998-01-12 15:04:08 adam
+ * Revision 1.20 2000-10-16 20:16:00 adam
+ * Fixed problem with close of lock file for WIN32.
+ *
+ * Revision 1.19 2000/09/05 14:04:05 adam
+ * Updates for prefix 'yaz_' for YAZ log functions.
+ *
+ * Revision 1.18 2000/02/24 11:00:07 adam
+ * Fixed bug: indexer would run forever when lock dir was non-existant.
+ *
+ * Revision 1.17 1999/12/08 15:03:11 adam
+ * Implemented bf_reset.
+ *
+ * Revision 1.16 1999/02/02 14:50:57 adam
+ * Updated WIN32 code specific sections. Changed header.
+ *
+ * Revision 1.15 1998/02/17 10:31:33 adam
+ * Fixed bug in zebraIndexUnlock. On NT, the lock files wasn't removed.
+ *
+ * Revision 1.14 1998/01/12 15:04:08 adam
* The test option (-s) only uses read-lock (and not write lock).
*
* Revision 1.13 1997/09/29 09:08:36 adam
*/
#include <stdio.h>
#include <assert.h>
-#ifdef WINDOWS
+#ifdef WIN32
#include <io.h>
#else
#include <unistd.h>
h = server_lock_org;
if (zebra_lock_nb (h))
{
-#ifndef WINDOWS
+#ifndef WIN32
if (errno != EWOULDBLOCK)
{
logf (LOG_FATAL|LOG_ERRNO, "flock");
zebra_lock_prefix (common_resource, path);
strcat (path, FNAME_MAIN_LOCK);
- unlink (path);
+#ifdef WIN32
+ zebra_lock_destroy (server_lock_main);
+ if (unlink (path) && errno != ENOENT)
+ logf (LOG_WARN|LOG_ERRNO, "unlink %s failed", path);
+#else
+ if (unlink (path) && errno != ENOENT)
+ logf (LOG_WARN|LOG_ERRNO, "unlink %s failed", path);
+ zebra_lock_destroy (server_lock_main);
+#endif
+ server_lock_main = 0;
}
-void zebraIndexLock (BFiles bfs, int commitNow, const char *rval)
+int zebraIndexLock (BFiles bfs, int commitNow, const char *rval)
{
char path[1024];
char buf[256];
int r;
if (server_lock_main)
- return ;
+ return 0;
zebra_lock_prefix (common_resource, path);
strcat (path, FNAME_MAIN_LOCK);
server_lock_main = zebra_lock_create (path, 1);
if (!server_lock_main)
{
- if (errno == ENOENT)
- continue;
- logf (LOG_FATAL|LOG_ERRNO, "open %s", path);
- exit (1);
+ logf (LOG_FATAL, "couldn't obtain indexer lock");
+ exit (1);
}
if (zebra_lock_nb (server_lock_main) == -1)
{
-#ifdef WINDOWS
+#ifdef WIN32
logf (LOG_LOG, "waiting for other index process");
zebra_lock (server_lock_main);
zebra_unlock (server_lock_main);
break;
}
zebra_lock (server_lock_main);
+ return 0;
}