[Pvfs2-cvs] commit by aching in pvfs2-1/src/common/id-generator: id-generator.c id-generator.h

CVS commit program cvs at parl.clemson.edu
Mon Jul 21 14:19:53 EDT 2008


Update of /projects/cvsroot/pvfs2-1/src/common/id-generator
In directory parlweb1:/tmp/cvs-serv19729/common/id-generator

Modified Files:
      Tag: locking-branch
	id-generator.c id-generator.h 
Log Message:

Reverse merged and ported to HEAD.


Index: id-generator.c
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/common/id-generator/id-generator.c,v
diff -p -u -r1.7 -r1.7.60.1
--- id-generator.c	28 Jul 2004 14:32:35 -0000	1.7
+++ id-generator.c	21 Jul 2008 18:19:53 -0000	1.7.60.1
@@ -10,9 +10,10 @@
 #include "quickhash.h"
 #include "gen-locks.h"
 
-#define DEFAULT_ID_GEN_SAFE_TABLE_SIZE 67
+#define DEFAULT_ID_GEN_SAFE_TABLE_SIZE 997
 
-static gen_mutex_t *s_id_gen_safe_mutex = NULL;
+static gen_mutex_t s_id_gen_safe_mutex = GEN_MUTEX_INITIALIZER;
+static int s_id_gen_safe_init_count = 0;
 
 static int hash_key(void *key, int table_size);
 static int hash_key_compare(void *key, struct qlist_head *link);
@@ -30,39 +31,50 @@ typedef struct
 static struct qhash_table *s_id_gen_safe_table = NULL;
 
 #define ID_GEN_SAFE_INITIALIZED() \
-(s_id_gen_safe_table && s_id_gen_safe_mutex)
+(s_id_gen_safe_table)
 
-int id_gen_safe_register(
-    PVFS_id_gen_t *new_id,
-    void *item)
+int id_gen_safe_initialize()
 {
-    id_gen_safe_t *id_elem = NULL;
-
-    if (!item)
-    {
-	return -PVFS_EINVAL;
-    }
-
     if (!ID_GEN_SAFE_INITIALIZED())
     {
-        /* FIXME: this is never finalized */
         s_id_gen_safe_table = qhash_init(
             hash_key_compare, hash_key, DEFAULT_ID_GEN_SAFE_TABLE_SIZE);
         if (!s_id_gen_safe_table)
         {
             return -PVFS_ENOMEM;
         }
+    }
+    s_id_gen_safe_init_count++;
+    return 0;
+}
 
-        s_id_gen_safe_mutex = gen_mutex_build();
-        if (!s_id_gen_safe_mutex)
-        {
-            free(s_id_gen_safe_table);
-            s_id_gen_safe_table = NULL;
-            return -PVFS_ENOMEM;
-        }
+int id_gen_safe_finalize()
+{
+    s_id_gen_safe_init_count--;
+    if(s_id_gen_safe_init_count == 0 && ID_GEN_SAFE_INITIALIZED())
+    {
+        gen_mutex_lock(&s_id_gen_safe_mutex);
+        qhash_destroy_and_finalize(s_id_gen_safe_table, id_gen_safe_t, hash_link, free);
+        s_id_gen_safe_table = NULL;
+        gen_mutex_unlock(&s_id_gen_safe_mutex);
+    }
+    return 0;
+}
+
+int id_gen_safe_register(
+    PVFS_id_gen_t *new_id,
+    void *item)
+{
+    id_gen_safe_t *id_elem = NULL;
+
+    assert(s_id_gen_safe_table != NULL);
+
+    if (!item)
+    {
+	return -PVFS_EINVAL;
     }
 
-    gen_mutex_lock(s_id_gen_safe_mutex);
+    gen_mutex_lock(&s_id_gen_safe_mutex);
 
     id_elem = (id_gen_safe_t *)malloc(sizeof(id_gen_safe_t));
     if (!id_elem)
@@ -77,7 +89,7 @@ int id_gen_safe_register(
 
     *new_id = id_elem->id;
 
-    gen_mutex_unlock(s_id_gen_safe_mutex);
+    gen_mutex_unlock(&s_id_gen_safe_mutex);
     return 0;
 }
 
@@ -89,7 +101,7 @@ void *id_gen_safe_lookup(PVFS_id_gen_t i
 
     if (ID_GEN_SAFE_INITIALIZED())
     {
-        gen_mutex_lock(s_id_gen_safe_mutex);
+        gen_mutex_lock(&s_id_gen_safe_mutex);
 
         hash_link = qhash_search(s_id_gen_safe_table, &id);
         if (hash_link)
@@ -101,7 +113,7 @@ void *id_gen_safe_lookup(PVFS_id_gen_t i
 
             ret = id_elem->item;
         }
-        gen_mutex_unlock(s_id_gen_safe_mutex);
+        gen_mutex_unlock(&s_id_gen_safe_mutex);
     }
     return ret;
 }
@@ -114,7 +126,7 @@ int id_gen_safe_unregister(PVFS_id_gen_t
 
     if (ID_GEN_SAFE_INITIALIZED())
     {
-        gen_mutex_lock(s_id_gen_safe_mutex);
+        gen_mutex_lock(&s_id_gen_safe_mutex);
 
         hash_link = qhash_search_and_remove(
             s_id_gen_safe_table, &new_id);
@@ -127,7 +139,7 @@ int id_gen_safe_unregister(PVFS_id_gen_t
             free(id_elem);
             ret = 0;
         }
-        gen_mutex_unlock(s_id_gen_safe_mutex);
+        gen_mutex_unlock(&s_id_gen_safe_mutex);
     }
     return ret;
 }

Index: id-generator.h
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/common/id-generator/id-generator.h,v
diff -p -u -r1.12 -r1.12.48.1
--- id-generator.h	16 Jun 2005 20:41:36 -0000	1.12
+++ id-generator.h	21 Jul 2008 18:19:53 -0000	1.12.48.1
@@ -58,6 +58,8 @@ static inline void *id_gen_fast_lookup(P
 
 #define id_gen_fast_unregister(id) do { } while(0)
 
+int id_gen_safe_initialize(void);
+int id_gen_safe_finalize(void);
 
 /* id_gen_safe_register()
  * 



More information about the Pvfs2-cvs mailing list