2 * Copyright (C) 1994-1995, Index Data I/S
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.1 1995-12-07 17:38:47 adam
8 * Work locking mechanisms for concurrent updates/commit.
22 static int server_lock_fd = -1;
24 int zebraServerLock (void)
26 char pathPrefix[1024];
29 zebraLockPrefix (pathPrefix);
31 assert (server_lock_fd == -1);
32 sprintf (path, "%szebrasrv.%ld", pathPrefix, (long) getpid());
33 if ((server_lock_fd = open (path, O_CREAT|O_RDWR|O_SYNC|O_EXCL, 0666))
36 logf (LOG_WARN|LOG_ERRNO, "remove stale %s", path);
38 if ((server_lock_fd = open (path, O_CREAT|O_RDWR|O_SYNC|O_EXCL, 0666))
41 logf (LOG_FATAL|LOG_ERRNO, "create %s", path);
45 flock (server_lock_fd, LOCK_EX);
50 int zebraServerLockGetState (void)
52 char pathPrefix[1024];
57 zebraLockPrefix (pathPrefix);
59 sprintf (path, "%s%s", pathPrefix, FNAME_MAIN_LOCK);
60 fd = open (path, O_RDONLY);
63 if (read (fd, buf, 2) == 0)
69 void zebraServerLockMsg (const char *str)
73 assert (server_lock_fd != -1);
74 lseek (server_lock_fd, 0L, SEEK_SET);
76 r = write (server_lock_fd, str, l);
79 logf (LOG_FATAL|LOG_ERRNO, "write server lock file");
84 void zebraServerUnlock (void)
86 char pathPrefix[1024];
89 assert (server_lock_fd != -1);
90 zebraLockPrefix (pathPrefix);
91 flock (server_lock_fd, LOCK_UN);
92 sprintf (path, "%szebrasrv.%ld", pathPrefix, (long) getpid());