X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Flockutil.c;h=79dd0dc1b11aa7fe93e45bd065a217959f705f8a;hb=4495fac3b7f760814dd3b41d0f64e5077193eeee;hp=acd65410aa3f86a6b4acad9fb56883b2be59e265;hpb=77006d65669383febd8cd4d1541278723c578564;p=idzebra-moved-to-github.git diff --git a/index/lockutil.c b/index/lockutil.c index acd6541..79dd0dc 100644 --- a/index/lockutil.c +++ b/index/lockutil.c @@ -4,17 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: lockutil.c,v $ - * Revision 1.1 1995-12-07 17:38:47 adam + * Revision 1.2 1995-12-11 11:43:29 adam + * Locking based on fcntl instead of flock. + * Setting commitEnable removed. Command line option -n can be used to + * prevent commit if commit setting is defined in the configuration file. + * + * Revision 1.1 1995/12/07 17:38:47 adam * Work locking mechanisms for concurrent updates/commit. * */ #include #include -#include -#include -#include #include #include +#include +#include +#include #include #include "index.h" @@ -31,3 +36,27 @@ void zebraLockPrefix (char *pathPrefix) if (*pathPrefix && pathPrefix[strlen(pathPrefix)-1] != '/') strcat (pathPrefix, "/"); } + +static int intLock (int fd, int type, int cmd) +{ + struct flock area; + area.l_type = type; + area.l_whence = SEEK_SET; + area.l_len = area.l_start = 0L; + return fcntl (fd, cmd, &area); +} + +int zebraLock (int fd, int wr) +{ + return intLock (fd, wr ? F_WRLCK : F_RDLCK, F_SETLKW); +} + +int zebraLockNB (int fd, int wr) +{ + return intLock (fd, wr ? F_WRLCK : F_RDLCK, F_SETLK); +} + +int zebraUnlock (int fd) +{ + return intLock (fd, F_UNLCK, F_SETLKW); +}