Update copyright year + FSF address
[idzebra-moved-to-github.git] / util / flock.c
index fda991b..3e9777a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: flock.c,v 1.15 2006-07-03 12:23:17 adam Exp $
+/* $Id: flock.c,v 1.18 2006-08-14 10:40:34 adam Exp $
    Copyright (C) 1995-2006
    Index Data ApS
 
@@ -15,9 +15,9 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra.  If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
 */
 
 
@@ -40,9 +40,6 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #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;
 
@@ -327,7 +324,6 @@ int zebra_lock_r(ZebraLockHandle h)
 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
@@ -335,17 +331,23 @@ int zebra_unlock(ZebraLockHandle h)
 #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
-        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)
-        do_unlock = 1;
-    if (do_unlock)
         r = unixLock(h->p->fd, F_UNLCK, F_SETLKW);
     else
     {
+        r = 0;
         assert(posix_locks);
     }
+
     zebra_mutex_unlock(&h->p->file_mutex);
 
     if (posix_locks)
@@ -392,14 +394,11 @@ void zebra_flock_init()
     {
         initialized = 1;
         log_level = yaz_log_module_level("flock");
-#if DEBUG_FLOCK
-        log_level = YLOG_LOG|YLOG_FLUSH;
-#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);
     }
-    yaz_log(log_level, "zebra_flock_init");
 }
 
 /*