From 9a361debb5c9e8e169e4d96dde73468600ab411e Mon Sep 17 00:00:00 2001 From: ewt Date: Sun, 29 Sep 1996 02:28:29 +0000 Subject: [PATCH] use posix fcntl() locks rather then BSD flock() CVS patchset: 1070 CVS date: 1996/09/29 02:28:29 --- lib/rpmdb.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/rpmdb.c b/lib/rpmdb.c index 0cd6c75..4b8f901 100644 --- a/lib/rpmdb.c +++ b/lib/rpmdb.c @@ -74,6 +74,7 @@ int openDatabase(char * prefix, char * dbpath, rpmdb *rpmdbp, int mode, char * filename; struct rpmdb db; int i; + struct flock lockinfo; i = strlen(dbpath); if (dbpath[i - 1] != '/') { @@ -107,14 +108,20 @@ int openDatabase(char * prefix, char * dbpath, rpmdb *rpmdbp, int mode, /* try and get a lock - this is released by the kernel when we close the file */ + lockinfo.l_whence = 0; + lockinfo.l_start = 0; + lockinfo.l_len = 0; + if (mode & O_RDWR) { - if (flock(db.pkgs->fd, LOCK_EX | LOCK_NB)) { + lockinfo.l_type = F_WRLCK; + if (fcntl(db.pkgs->fd, F_SETLK, (void *) &lockinfo)) { error(RPMERR_FLOCK, "cannot get %s lock on database", "exclusive"); return 1; } } else { - if (flock(db.pkgs->fd, LOCK_SH | LOCK_NB)) { + lockinfo.l_type = F_RDLCK; + if (fcntl(db.pkgs->fd, F_SETLK, (void *) &lockinfo)) { error(RPMERR_FLOCK, "cannot get %s lock on database", "shared"); return 1; } -- 2.7.4