Work on new API. Locking system re-implemented
[idzebra-moved-to-github.git] / index / lockidx.c
index 1469f01..4904de4 100644 (file)
@@ -4,7 +4,19 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: lockidx.c,v $
- * Revision 1.17  1999-12-08 15:03:11  adam
+ * Revision 1.21  2002-02-20 17:30:01  adam
+ * Work on new API. Locking system re-implemented
+ *
+ * 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
 #include <errno.h>
 
 #include "index.h"
+#include "zserver.h"
 
 static ZebraLockHandle server_lock_main = NULL;
 static ZebraLockHandle server_lock_cmt = NULL;
 static ZebraLockHandle server_lock_org = NULL;
 
-int zebraIndexWait (int commitPhase)
+int zebraIndexWait (ZebraHandle zh, int commitPhase)
 {
     ZebraLockHandle h;
 
@@ -92,7 +105,7 @@ int zebraIndexWait (int commitPhase)
     {
        char path[1024];
 
-       zebra_lock_prefix (common_resource, path);
+       zebra_lock_prefix (zh->service->res, path);
        strcat (path, FNAME_COMMIT_LOCK);
        server_lock_cmt = zebra_lock_create (path, 1);
        if (!server_lock_cmt)
@@ -107,7 +120,7 @@ int zebraIndexWait (int commitPhase)
     {
        char path[1024];
 
-       zebra_lock_prefix (common_resource, path);
+       zebra_lock_prefix (zh->service->res, path);
        strcat (path, FNAME_ORG_LOCK);
        server_lock_org = zebra_lock_create (path, 1);
        if (!server_lock_org)
@@ -144,7 +157,7 @@ int zebraIndexWait (int commitPhase)
 }
 
 
-void zebraIndexLockMsg (const char *str)
+void zebraIndexLockMsg (ZebraHandle zh, const char *str)
 {
     char path[1024];
     int l, r, fd;
@@ -159,34 +172,41 @@ void zebraIndexLockMsg (const char *str)
         logf (LOG_FATAL|LOG_ERRNO, "write lock file");
         exit (1);
     }
-    zebra_lock_prefix (common_resource, path);
+    zebra_lock_prefix (zh->service->res, path);
     strcat (path, FNAME_TOUCH_TIME);
     fd = creat (path, 0666);
     close (fd);
 }
 
-void zebraIndexUnlock (void)
+void zebraIndexUnlock (ZebraHandle zh)
 {
     char path[1024];
     
-    zebra_lock_destroy (server_lock_main);
-    server_lock_main = 0;
-    zebra_lock_prefix (common_resource, path);
+    zebra_lock_prefix (zh->service->res, path);
     strcat (path, FNAME_MAIN_LOCK);
+#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, ZebraHandle zh, 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);
+    zebra_lock_prefix (zh->service->res, path);
     strcat (path, FNAME_MAIN_LOCK);
     while (1)
     {
@@ -196,10 +216,8 @@ void zebraIndexLock (BFiles bfs, int commitNow, const char *rval)
             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)
             {
@@ -294,5 +312,6 @@ void zebraIndexLock (BFiles bfs, int commitNow, const char *rval)
             break;
     }
     zebra_lock (server_lock_main);
+    return 0;
 }