-/*!
- * Get lock on db lock file
- *
- * @args cmd (r) !=0: lock, 0: unlock
- * @returns 1 if lock was acquired, 0 if file is already locked, -1 on error
- */
-static int get_lock(int cmd)
-{
- static int lockfd = -1;
- struct flock lock;
-
- if (cmd == 0) {
- if (lockfd == -1)
- return -1;
-
- lock.l_start = 0;
- lock.l_whence = SEEK_SET;
- lock.l_len = 0;
- lock.l_type = F_UNLCK;
- fcntl(lockfd, F_SETLK, &lock);
- close(lockfd);
- lockfd = -1;
- return 0;
- }
-
- if (lockfd == -1) {
- if ((lockfd = open(LOCKFILENAME, O_RDWR | O_CREAT, 0644)) < 0) {
- LOG(log_error, logtype_cnid, "get_lock: error opening lockfile: %s", strerror(errno));
- return -1;
- }
- }
-
- lock.l_start = 0;
- lock.l_whence = SEEK_SET;
- lock.l_len = 0;
- lock.l_type = F_WRLCK;
-
- if (fcntl(lockfd, F_SETLK, &lock) < 0) {
- if (errno == EACCES || errno == EAGAIN) {
- LOG(log_debug, logtype_cnid, "get_lock: couldn't lock");
- return 0;
- } else {
- LOG(log_error, logtype_cnid, "get_lock: fcntl F_WRLCK lockfile: %s", strerror(errno));
- return -1;
- }
- }
-
- LOG(log_debug, logtype_cnid, "get_lock: got lock");
- return 1;
-}
-