changeset 18:cee3eecc5c22

Fixed transaction bug -- didn't init with semantic data
author Me
date Mon, 08 Nov 2010 04:02:50 -0800
parents bf57b83019e5
children b549ad140f18
files SSR.h SSR_PluginFns.c SSR_Request_Handlers.c SSR_lib.c
diffstat 4 files changed, 39 insertions(+), 23 deletions(-) [+]
line diff
     1.1 --- a/SSR.h	Tue Nov 02 16:57:45 2010 -0700
     1.2 +++ b/SSR.h	Mon Nov 08 04:02:50 2010 -0800
     1.3 @@ -99,7 +99,8 @@
     1.4     int32          transID;
     1.5     TransListElem *nextTrans;
     1.6   };
     1.7 -
     1.8 +//TransListElem
     1.9 + 
    1.10  typedef struct
    1.11   {
    1.12     int32          highestTransEntered;
     2.1 --- a/SSR_PluginFns.c	Tue Nov 02 16:57:45 2010 -0700
     2.2 +++ b/SSR_PluginFns.c	Mon Nov 08 04:02:50 2010 -0800
     2.3 @@ -133,6 +133,7 @@
     2.4  handleDissipate( VirtProcr *requestingPr, SSRSemEnv *semEnv )
     2.5   {
     2.6        //free any semantic data allocated to the virt procr
     2.7 +   VMS__free( requestingPr->semanticData );
     2.8  
     2.9        //Now, call VMS to free_all AppVP state -- stack and so on
    2.10     VMS__dissipate_procr( requestingPr );
    2.11 @@ -144,25 +145,28 @@
    2.12      }
    2.13   }
    2.14  
    2.15 -void
    2.16 -handleCreate( VMSReqst *req, VirtProcr *requestingPr, SSRSemEnv *semEnv  )
    2.17 - { SSRSemReq *semReq;
    2.18 -   VirtProcr    *newPr;
    2.19 -
    2.20 -   semReq = VMS__take_sem_reqst_from( req );
    2.21 +/*Re-use this in the entry-point fn
    2.22 + */
    2.23 +inline VirtProcr *
    2.24 +SSR__create_procr_helper( VirtProcrFnPtr fnPtr, void *initData,
    2.25 +                          SSRSemEnv *semEnv,    int32 coreToScheduleOnto )
    2.26 + { VirtProcr    *newPr;
    2.27 +   SSRSemData    semData;
    2.28  
    2.29        //This is running in master, so use internal version
    2.30 -   newPr = VMS__create_procr( semReq->fnPtr, semReq->initData );
    2.31 +   newPr = VMS__create_procr( fnPtr, initData );
    2.32  
    2.33     semEnv->numVirtPr += 1;
    2.34  
    2.35 -      //Assign new processor to a core & transition it to ready
    2.36 +   semData = VMS__malloc( sizeof(SSRSemData) );
    2.37 +   semData->highestTransEntered = -1;
    2.38 +   semData->lastTransEntered    = NULL;
    2.39 +
    2.40 +   //=================== Assign new processor to a core =====================
    2.41     #ifdef SEQUENTIAL
    2.42     newPr->coreAnimatedBy = 0;
    2.43  
    2.44     #else
    2.45 -   int32
    2.46 -   coreToScheduleOnto = semReq->coreToScheduleOnto;
    2.47  
    2.48     if(coreToScheduleOnto < 0 || coreToScheduleOnto >= NUM_CORES )
    2.49      {    //out-of-range, so round-robin assignment
    2.50 @@ -177,7 +181,21 @@
    2.51      { newPr->coreAnimatedBy = coreToScheduleOnto;
    2.52      }
    2.53     #endif
    2.54 +   //========================================================================
    2.55 +   
    2.56 +   return newPr;
    2.57 + }
    2.58  
    2.59 +void
    2.60 +handleCreate( VMSReqst *req, VirtProcr *requestingPr, SSRSemEnv *semEnv  )
    2.61 + { SSRSemReq *semReq;
    2.62 +   VirtProcr    *newPr;
    2.63 +
    2.64 +   semReq = VMS__take_sem_reqst_from( req );
    2.65 +
    2.66 +   newPr = SSR__create_procr_helper( semReq->fnPtr, semReq->initData, semEnv,
    2.67 +                                     semReq->coreToScheduleOnto );
    2.68 +   
    2.69        //For SSR, caller needs ptr to created processor returned to it
    2.70     requestingPr->dataRetFromReq = newPr;
    2.71  
     3.1 --- a/SSR_Request_Handlers.c	Tue Nov 02 16:57:45 2010 -0700
     3.2 +++ b/SSR_Request_Handlers.c	Mon Nov 08 04:02:50 2010 -0800
     3.3 @@ -118,7 +118,8 @@
     3.4        SSRSemReq *clonedReq = cloneReq( semReq );
     3.5        clonedReq-> nextReqInHashEntry = waitingReq->nextReqInHashEntry;
     3.6        waitingReq->nextReqInHashEntry = clonedReq;
     3.7 -         PRINT2_DEBUG("linked requests: %d, %d  |  ", clonedReq, waitingReq )
     3.8 +         DEBUG2( dbgRqstHdlr, "linked requests: %d, %d  |  ", clonedReq,\
     3.9 +                                                                 waitingReq )
    3.10        return;
    3.11      }
    3.12     else
    3.13 @@ -265,7 +266,7 @@
    3.14         }
    3.15        
    3.16           //attach msg that's in the send request to receiving procr
    3.17 -         // when comes back from suspend, will have msg in dataReturnedFromReq
    3.18 +         // when comes back from suspend, will have msg in dataRetFromReq
    3.19        receivePr->dataRetFromReq = waitingReq->msg;
    3.20  
    3.21           //bring both processors back from suspend
     4.1 --- a/SSR_lib.c	Tue Nov 02 16:57:45 2010 -0700
     4.2 +++ b/SSR_lib.c	Mon Nov 08 04:02:50 2010 -0800
     4.3 @@ -103,13 +103,11 @@
     4.4  
     4.5        //SSR starts with one processor, which is put into initial environ,
     4.6        // and which then calls create() to create more, thereby expanding work
     4.7 -   seedPr = VMS__create_procr( fnPtr, initData );
     4.8 +   seedPr = SSR__create_procr_helper( fnPtr, initData,
     4.9 +                                      semEnv, semEnv->nextCoreToGetNewPr++ );
    4.10  
    4.11 -   seedPr->coreAnimatedBy = semEnv->nextCoreToGetNewPr++;
    4.12 -
    4.13 -   writePrivQ( seedPr, semEnv->readyVPQs[seedPr->coreAnimatedBy] );
    4.14 -   semEnv->numVirtPr = 1;
    4.15 -
    4.16 +   resumePr( seedPr, semEnv );
    4.17 +   
    4.18     #ifdef SEQUENTIAL
    4.19     VMS__start_the_work_then_wait_until_done_Seq();  //debug sequential exe
    4.20     #else
    4.21 @@ -221,6 +219,7 @@
    4.22     semanticEnv->readyVPQs = readyVPQs;
    4.23     
    4.24     semanticEnv->nextCoreToGetNewPr = 0;
    4.25 +   semanticEnv->numVirtPr = 0;
    4.26     
    4.27     semanticEnv->commHashTbl  = makeHashTable( 1<<16, &VMS__free );//start big
    4.28  
    4.29 @@ -232,9 +231,6 @@
    4.30        semanticEnv->singletonHasBeenExecutedFlags[i] = FALSE;
    4.31        semanticEnv->transactionStrucs[i].waitingVPQ = makePrivQ();
    4.32      }
    4.33 -
    4.34 -
    4.35 -   
    4.36   }
    4.37  
    4.38  
    4.39 @@ -568,4 +564,4 @@
    4.40     reqData.transID     = transactionID;
    4.41  
    4.42     VMS__send_sem_request( &reqData, animPr );
    4.43 - }
    4.44 \ No newline at end of file
    4.45 + }