X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Flockutil.c;h=5cd6f86f8eac5c620c33ada378dbdeb6ef33248e;hb=af7bc27d33843a8e667022f24589450c39f907f2;hp=acd65410aa3f86a6b4acad9fb56883b2be59e265;hpb=4e2fc80e64f3d7895a871ea5b08aa80045a59f2c;p=idzebra-moved-to-github.git diff --git a/index/lockutil.c b/index/lockutil.c index acd6541..5cd6f86 100644 --- a/index/lockutil.c +++ b/index/lockutil.c @@ -4,19 +4,37 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: lockutil.c,v $ - * Revision 1.1 1995-12-07 17:38:47 adam + * Revision 1.6 1996-10-29 14:08:14 adam + * Uses resource lockDir instead of lockPath. + * + * 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" static char *lockDir = NULL; @@ -31,3 +49,35 @@ 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) +{ +#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); +}