From: Adam Dickmeiss Date: Fri, 24 Mar 2006 13:33:57 +0000 (+0000) Subject: Fix windows logging .. Call _locking repeatedly .. Becuase Windows gives up X-Git-Tag: before.bug.529~201 X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=commitdiff_plain;h=9426a55fbae4e19d123946f15fbf9ee4b03ead3d Fix windows logging .. Call _locking repeatedly .. Becuase Windows gives up locking after 10 seconds. Bug #529. --- diff --git a/util/flock.c b/util/flock.c index a69c4cf..66f2709 100644 --- a/util/flock.c +++ b/util/flock.c @@ -1,4 +1,4 @@ -/* $Id: flock.c,v 1.3 2006-03-23 20:40:31 adam Exp $ +/* $Id: flock.c,v 1.4 2006-03-24 13:33:57 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -44,7 +44,7 @@ struct zebra_lock_info { char *fname; }; -static int log_level = YLOG_LOG; +int log_level = 0 /* YLOG_LOG|YLOG_FLUSH */; char *zebra_mk_fname (const char *dir, const char *name) { @@ -98,6 +98,7 @@ ZebraLockHandle zebra_lock_create (const char *dir, const char *name) h = 0; } h->fname = fname; + yaz_log(log_level, "zebra_lock_create fd=%d p=%p fname=%s", h->fd, h, h->fname); return h; } @@ -105,6 +106,7 @@ void zebra_lock_destroy (ZebraLockHandle 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); @@ -124,22 +126,30 @@ static int unixLock (int fd, int type, int cmd) int zebra_lock_w (ZebraLockHandle h) { - yaz_log(log_level, "zebra_lock_w p=%p fname=%s", h, h->fname); + 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) { - yaz_log(log_level, "zebra_lock_r p=%p fname=%s", h, h->fname); + 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)