[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