X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Flockutil.c;h=d59067f003780c5594b7beaad2d83305a05f24bd;hb=adc0ef50c52d332902ef92c8feb460eee55a1f05;hp=acd65410aa3f86a6b4acad9fb56883b2be59e265;hpb=4e2fc80e64f3d7895a871ea5b08aa80045a59f2c;p=idzebra-moved-to-github.git diff --git a/index/lockutil.c b/index/lockutil.c index acd6541..d59067f 100644 --- a/index/lockutil.c +++ b/index/lockutil.c @@ -4,17 +4,33 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: lockutil.c,v $ - * Revision 1.1 1995-12-07 17:38:47 adam + * Revision 1.5 1996-03-26 16:01:13 adam + * New setting lockPath: directory of various lock files. + * + * Revision 1.4 1995/12/13 08:46:10 adam + * Locking uses F_WRLCK and F_RDLCK again! + * + * Revision 1.3 1995/12/12 16:00:57 adam + * System call sync(2) used after update/commit. + * Locking (based on fcntl) uses F_EXLCK and F_SHLCK instead of F_WRLCK + * and F_RDLCK. + * + * 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" @@ -24,10 +40,42 @@ static char *lockDir = NULL; void zebraLockPrefix (char *pathPrefix) { if (!lockDir) - lockDir = res_get_def (common_resource, "lockDir", ""); + lockDir = res_get_def (common_resource, "lockPath", ""); assert (lockDir); strcpy (pathPrefix, lockDir); 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) +{ +#if 0 + return intLock (fd, wr ? F_EXLCK : F_SHLCK, F_SETLKW); +#else + return intLock (fd, wr ? F_WRLCK : F_RDLCK, F_SETLKW); +#endif +} + +int zebraLockNB (int fd, int wr) +{ +#if 0 + return intLock (fd, wr ? F_EXLCK : F_SHLCK, F_SETLK); +#else + return intLock (fd, wr ? F_WRLCK : F_RDLCK, F_SETLK); +#endif +} + +int zebraUnlock (int fd) +{ + return intLock (fd, F_UNLCK, F_SETLKW); +}