projects
/
idzebra-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Get rid of DEBUG_FLOCK. Just set flock level for tstflock program.
[idzebra-moved-to-github.git]
/
util
/
flock.c
diff --git
a/util/flock.c
b/util/flock.c
index
009c971
..
330fbf7
100644
(file)
--- a/
util/flock.c
+++ b/
util/flock.c
@@
-1,4
+1,4
@@
-/* $Id: flock.c,v 1.14 2006-07-03 09:50:51 adam Exp $
+/* $Id: flock.c,v 1.17 2006-07-05 12:02:12 adam Exp $
Copyright (C) 1995-2006
Index Data ApS
Copyright (C) 1995-2006
Index Data ApS
@@
-40,13
+40,10
@@
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include <yaz/xmalloc.h>
#include <yaz/log.h>
#include <yaz/xmalloc.h>
#include <yaz/log.h>
-/** whether this module should debug */
-#define DEBUG_FLOCK 1
-
/** have this module (mutex) been initialized? */
static int initialized = 0;
/** have this module (mutex) been initialized? */
static int initialized = 0;
-/** whether fcntl locks are shared for all threads in a process */
+/** whether fcntl locks are shared for all threads in a process (POSIX) */
static int posix_locks = 1;
/** mutex for lock_list below */
static int posix_locks = 1;
/** mutex for lock_list below */
@@
-327,7
+324,6
@@
int zebra_lock_r(ZebraLockHandle h)
int zebra_unlock(ZebraLockHandle h)
{
int r = 0;
int zebra_unlock(ZebraLockHandle h)
{
int r = 0;
- int do_unlock = 0;
yaz_log(log_level, "zebra_unlock fd=%d p=%p fname=%s begin",
h->p->fd, h, h->p->fname);
#ifdef WIN32
yaz_log(log_level, "zebra_unlock fd=%d p=%p fname=%s begin",
h->p->fd, h, h->p->fname);
#ifdef WIN32
@@
-335,17
+331,23
@@
int zebra_unlock(ZebraLockHandle h)
#else
zebra_mutex_lock(&h->p->file_mutex);
if (h->write_flag)
#else
zebra_mutex_lock(&h->p->file_mutex);
if (h->write_flag)
- h->p->no_file_write_lock--;
+ {
+ if (h->p->no_file_write_lock > 0)
+ h->p->no_file_write_lock--;
+ }
else
else
- h->p->no_file_read_lock--;
+ {
+ if (h->p->no_file_read_lock > 0)
+ h->p->no_file_read_lock--;
+ }
if (h->p->no_file_read_lock == 0 && h->p->no_file_write_lock == 0)
if (h->p->no_file_read_lock == 0 && h->p->no_file_write_lock == 0)
- do_unlock = 1;
- if (do_unlock)
r = unixLock(h->p->fd, F_UNLCK, F_SETLKW);
else
{
r = unixLock(h->p->fd, F_UNLCK, F_SETLKW);
else
{
+ r = 0;
assert(posix_locks);
}
assert(posix_locks);
}
+
zebra_mutex_unlock(&h->p->file_mutex);
if (posix_locks)
zebra_mutex_unlock(&h->p->file_mutex);
if (posix_locks)
@@
-361,23
+363,30
@@
int zebra_unlock(ZebraLockHandle h)
return r;
}
return r;
}
-#if HAVE_CONFSTR
-static int test_for_linuxthreads()
+/** \brief see if the fcntl locking is not POSIX
+ *
+ * The default posix_locks=1 is assumed.. This function sets posix_locks
+ * to zero if linuxthreads is in use.
+ */
+static int check_for_linuxthreads()
{
{
+#if __linux
+#ifdef _CS_GNU_LIBPTHREAD_VERSION
char conf_buf[512];
char conf_buf[512];
- size_t r;
-
- r = confstr(_CS_GNU_LIBPTHREAD_VERSION, conf_buf, sizeof(conf_buf));
+ size_t r = confstr(_CS_GNU_LIBPTHREAD_VERSION, conf_buf, sizeof(conf_buf));
if (r == 0)
{
yaz_log(YLOG_WARN|YLOG_ERRNO, "confstr failed");
return -1;
}
if (strncmp(conf_buf, "linuxthreads", 12) == 0)
if (r == 0)
{
yaz_log(YLOG_WARN|YLOG_ERRNO, "confstr failed");
return -1;
}
if (strncmp(conf_buf, "linuxthreads", 12) == 0)
- posix_locks = 0;
+ posix_locks = 0; /* Using linuxthreads.. */
+#else
+ posix_locks = 0; /* Old GLIBC on Linux. Assume linuxthreads */
+#endif
+#endif
return 0;
}
return 0;
}
-#endif
void zebra_flock_init()
{
void zebra_flock_init()
{
@@
-385,16
+394,11
@@
void zebra_flock_init()
{
initialized = 1;
log_level = yaz_log_module_level("flock");
{
initialized = 1;
log_level = yaz_log_module_level("flock");
-#if DEBUG_FLOCK
- log_level = YLOG_LOG|YLOG_FLUSH;
-#endif
-#if HAVE_CONFSTR
- test_for_linuxthreads();
-#endif
+ yaz_log(log_level, "zebra_flock_init");
+ check_for_linuxthreads();
zebra_mutex_init(&lock_list_mutex);
yaz_log(log_level, "posix_locks: %d", posix_locks);
}
zebra_mutex_init(&lock_list_mutex);
yaz_log(log_level, "posix_locks: %d", posix_locks);
}
- yaz_log(log_level, "zebra_flock_init");
}
/*
}
/*