+static int server_lock_cmt = -1;
+static int server_lock_org = -1;
+
+int zebraIndexWait (int commitPhase)
+{
+ char pathPrefix[1024];
+ char path[1024];
+ int fd;
+
+ zebraLockPrefix (pathPrefix);
+
+ if (server_lock_cmt == -1)
+ {
+ sprintf (path, "%s%s", pathPrefix, FNAME_COMMIT_LOCK);
+ if ((server_lock_cmt = open (path, O_BINARY|O_CREAT|O_RDWR|O_SYNC,
+ 0666))
+ == -1)
+ {
+ logf (LOG_FATAL|LOG_ERRNO, "create %s", path);
+ return -1;
+ }
+ }
+ else
+ zebraUnlock (server_lock_cmt);
+ if (server_lock_org == -1)
+ {
+ sprintf (path, "%s%s", pathPrefix, FNAME_ORG_LOCK);
+ if ((server_lock_org = open (path, O_BINARY|O_CREAT|O_RDWR|O_SYNC,
+ 0666))
+ == -1)
+ {
+ logf (LOG_FATAL|LOG_ERRNO, "create %s", path);
+ return -1;
+ }
+ }
+ else
+ zebraUnlock (server_lock_org);
+ if (commitPhase)
+ fd = server_lock_cmt;
+ else
+ fd = server_lock_org;
+ if (zebraLockNB (fd, 1) == -1)
+ {
+ if (errno != EWOULDBLOCK)
+ {
+ logf (LOG_FATAL|LOG_ERRNO, "flock");
+ exit (1);
+ }
+ if (commitPhase)
+ logf (LOG_LOG, "Waiting for lock cmt");
+ else
+ logf (LOG_LOG, "Waiting for lock org");
+ if (zebraLock (fd, 1) == -1)
+ {
+ logf (LOG_FATAL|LOG_ERRNO, "flock");
+ exit (1);
+ }
+ }
+ zebraUnlock (fd);
+ return 0;
+}
+