[Pvfs2-cvs] commit by pcarns in pvfs2-1/src/io/job: job.c
CVS commit program
cvs at parl.clemson.edu
Thu May 13 14:10:06 EDT 2010
Update of /projects/cvsroot/pvfs2-1/src/io/job
In directory parlweb1:/tmp/cvs-serv15585
Modified Files:
job.c
Log Message:
experimental update of fix for precreate bug reported by Bart Taylor (original
fix led to a seg fault).
Index: job.c
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/io/job/job.c,v
diff -p -u -r1.191 -r1.192
--- job.c 6 May 2010 19:42:34 -0000 1.191
+++ job.c 13 May 2010 18:10:06 -0000 1.192
@@ -4428,20 +4428,24 @@ static void precreate_pool_get_thread_mg
trove_pending_count--;
assert(trove_pending_count >= 0);
- tmp_trove->jd->u.precreate_pool.trove_pending--;
- assert(tmp_trove->jd->u.precreate_pool.trove_pending >= 0);
-
/* don't overwrite error codes from other trove ops */
if(tmp_trove->jd->u.precreate_pool.error_code == 0)
{
tmp_trove->jd->u.precreate_pool.error_code = error_code;
}
+ /* acquiring this mutex a little early so that it can also serve to
+ * prevent multiple trove operations from racing between decrementing
+ * and then reading the pool.trove_pending counter
+ */
+ gen_mutex_lock(&completion_mutex);
+
+ tmp_trove->jd->u.precreate_pool.trove_pending--;
+ assert(tmp_trove->jd->u.precreate_pool.trove_pending >= 0);
+
/* is this job done? */
if(tmp_trove->jd->u.precreate_pool.trove_pending == 0)
{
- gen_mutex_lock(&completion_mutex);
-
/* set job descriptor fields and put into completion queue */
tmp_trove->jd->u.precreate_pool.error_code = 0;
job_desc_q_add(completion_queue_array[tmp_trove->jd->context_id],
@@ -4458,6 +4462,7 @@ static void precreate_pool_get_thread_mg
return;
}
+ gen_mutex_unlock(&completion_mutex);
return;
}
@@ -5704,8 +5709,8 @@ int job_precreate_pool_get_handles(
jd->u.precreate_pool.precreate_handle_index = 0;
jd->u.precreate_pool.fsid = fsid;
jd->u.precreate_pool.servers = servers;
- jd->u.precreate_pool.trove_pending = 0;
jd->u.precreate_pool.flags = flags;
+ jd->u.precreate_pool.trove_pending = 0;
/* rotate to use a different starting server in the pool next time */
gen_mutex_lock(&precreate_pool_mutex);
More information about the Pvfs2-cvs
mailing list