-/* $Id: flock.c,v 1.1 2006-03-23 09:15:25 adam Exp $
+/* $Id: flock.c,v 1.7 2006-05-10 08:13:46 adam Exp $
Copyright (C) 1995-2005
Index Data ApS
#include <idzebra/flock.h>
#include <yaz/xmalloc.h>
+#include <yaz/log.h>
struct zebra_lock_info {
int fd;
+ char *fname;
};
+static int log_level = 0 /* YLOG_LOG|YLOG_FLUSH */;
+
char *zebra_mk_fname (const char *dir, const char *name)
{
int dlen = dir ? strlen(dir) : 0;
if (h->fd == -1)
{
xfree (h);
- h = 0;
+ yaz_log(YLOG_WARN | YLOG_ERRNO, "zebra_lock_create fail fname=%s", fname);
+ return 0;
}
- xfree (fname);
+ h->fname = fname;
+ yaz_log(log_level, "zebra_lock_create fd=%d p=%p fname=%s", h->fd, h, h->fname);
return h;
}
{
if (!h)
return;
+ yaz_log(log_level, "zebra_lock_destroy fd=%d p=%p fname=%s", h->fd, h, h->fname);
if (h->fd != -1)
close (h->fd);
+ xfree (h->fname);
xfree (h);
}
int zebra_lock_w (ZebraLockHandle h)
{
+ int r;
+ yaz_log(log_level, "zebra_lock_w fd=%d p=%p fname=%s", h->fd, h, h->fname);
#ifdef WIN32
- return _locking (h->fd, _LK_LOCK, 1);
+ while ((r = _locking (h->fd, _LK_LOCK, 1)))
+ ;
#else
- return unixLock (h->fd, F_WRLCK, F_SETLKW);
+ r = unixLock (h->fd, F_WRLCK, F_SETLKW);
#endif
+ yaz_log(log_level, "zebra_lock_w fd=%d p=%p fname=%s OK", h->fd, h, h->fname);
+ return r;
}
int zebra_lock_r (ZebraLockHandle h)
{
+ int r;
+ yaz_log(log_level, "zebra_lock_r fd=%d p=%p fname=%s", h->fd, h, h->fname);
#ifdef WIN32
- return _locking (h->fd, _LK_LOCK, 1);
+ while ((r = _locking (h->fd, _LK_LOCK, 1)))
+ ;
#else
- return unixLock (h->fd, F_RDLCK, F_SETLKW);
+ r = unixLock (h->fd, F_RDLCK, F_SETLKW);
#endif
+ yaz_log(log_level, "zebra_lock_r fd=%d p=%p fname=%s OK", h->fd, h, h->fname);
+ return r;
}
int zebra_unlock (ZebraLockHandle h)
{
+ yaz_log(log_level, "zebra_unlock fd=%d p=%p fname=%s", h->fd, h, h->fname);
#ifdef WIN32
return _locking (h->fd, _LK_UNLCK, 1);
#else
#endif
}
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+