From c85b513fcee3891a2c421925eb46179f44b55577 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Sun, 24 Nov 2013 10:51:37 +0000
Subject: [PATCH] Problem with locking fixed. New problem arises with Vertex not in cell or segfault

---
 src/vertex.c     |    8 ++++----
 src/taint_test.c |    2 +-
 src/tape         |    6 +++---
 src/general.h    |    2 +-
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/general.h b/src/general.h
index b4ce974..98303ac 100644
--- a/src/general.h
+++ b/src/general.h
@@ -154,7 +154,7 @@
         ts_double projArea;
         ts_double relR;
         ts_double solAngle;
-	ts_int locked;
+	ts_uint *locked;
 };
 typedef struct ts_vertex ts_vertex;
 
diff --git a/src/taint_test.c b/src/taint_test.c
index 07b53c1..e501592 100644
--- a/src/taint_test.c
+++ b/src/taint_test.c
@@ -25,7 +25,7 @@
 for(i=0;i<vesicle->vlist->n;i++){
 	vertex_taint(vesicle->vlist->vtx[i],1);
 	vertex_untaint(vesicle->vlist->vtx[i],1);
-	printf("%d taint amount %d\n",i,vesicle->vlist->vtx[i]->locked);
+	printf("%d taint amount %u\n",i,*(vesicle->vlist->vtx[i]->locked));
 	if(vertex_tainted(vesicle->vlist->vtx[i], 0, 1)) printf("Ooops, Main  %d is tainted!\n",i);
 	for(j=0;j<vesicle->vlist->vtx[i]->neigh_no;j++){
 		if(vertex_tainted(vesicle->vlist->vtx[i]->neigh[j], 0, 1)){
diff --git a/src/tape b/src/tape
index b23adac..73727fa 100644
--- a/src/tape
+++ b/src/tape
@@ -28,10 +28,10 @@
 quiet=false
 
 #what type of multiprocessing? (*none, smp, cluster, distributed, cuda, auto)
-#currently only none makes sense.
+#currently only none and smp makes sense. If set to none, smp_cores defaults to 1
 multiprocessing=smp
-#how many cores are allowed to process in SMP?
-smp_cores=4
+#how many cores are allowed to process in SMP? If smp_cores=0, then number of threads will corespond with number of harware processor cores.
+smp_cores=6
 #how many nodes in cluster?
 cluster_nodes=50
 #max number of processes in distributed (voluntary) environment
diff --git a/src/vertex.c b/src/vertex.c
index cd29e13..30b294f 100644
--- a/src/vertex.c
+++ b/src/vertex.c
@@ -23,7 +23,7 @@
     for(i=0;i<N;i++) {
         vlist->vtx[i]=(ts_vertex *)calloc(1,sizeof(ts_vertex));
         vlist->vtx[i]->idx=i;
-
+	vlist->vtx[i]->locked=(ts_uint *)calloc(1,sizeof(ts_vertex));
     /* initialize Ylm for spherical hamonics DONE in sh.c */
 /*    for(i=0;i<l;i++){
         vlist->vtx[i]->Ylm[i]=(ts_double **)calloc(2*i+1,sizeof(ts_double *));
@@ -316,7 +316,7 @@
 
 ts_bool vertex_taint(ts_vertex *vtx, ts_uint level){
 	ts_uint i;
-	vtx->locked++; //lock current vertex
+	(*(vtx->locked))++; //lock current vertex
 	if(level==0){ //if we reach last in recursion exit
 		return TS_SUCCESS;	
 	}	
@@ -327,7 +327,7 @@
 }
 
 ts_bool vertex_untaint(ts_vertex *vtx, ts_uint level){
-		vtx->locked--;
+		(*(vtx->locked))--;
 	if(level==0){
 		return TS_SUCCESS;	
 	}	
@@ -339,7 +339,7 @@
 }
 
 inline ts_bool vertex_tainted(ts_vertex *vtx, ts_uint level, ts_uint amount){
-	if(vtx->locked>amount) return 1;
+	if(*(vtx->locked)>amount) return 1;
 	if(level==0){
 		return 0;
 	}

--
Gitblit v1.9.3