# HG changeset patch # User Me # Date 1289217770 28800 # Node ID cee3eecc5c223a99af2555d182916da80cb178e2 # Parent bf57b83019e597b0fc8ac3fdacd3bb454b62f73b Fixed transaction bug -- didn't init with semantic data diff -r bf57b83019e5 -r cee3eecc5c22 SSR.h --- a/SSR.h Tue Nov 02 16:57:45 2010 -0700 +++ b/SSR.h Mon Nov 08 04:02:50 2010 -0800 @@ -99,7 +99,8 @@ int32 transID; TransListElem *nextTrans; }; - +//TransListElem + typedef struct { int32 highestTransEntered; diff -r bf57b83019e5 -r cee3eecc5c22 SSR_PluginFns.c --- a/SSR_PluginFns.c Tue Nov 02 16:57:45 2010 -0700 +++ b/SSR_PluginFns.c Mon Nov 08 04:02:50 2010 -0800 @@ -133,6 +133,7 @@ handleDissipate( VirtProcr *requestingPr, SSRSemEnv *semEnv ) { //free any semantic data allocated to the virt procr + VMS__free( requestingPr->semanticData ); //Now, call VMS to free_all AppVP state -- stack and so on VMS__dissipate_procr( requestingPr ); @@ -144,25 +145,28 @@ } } -void -handleCreate( VMSReqst *req, VirtProcr *requestingPr, SSRSemEnv *semEnv ) - { SSRSemReq *semReq; - VirtProcr *newPr; - - semReq = VMS__take_sem_reqst_from( req ); +/*Re-use this in the entry-point fn + */ +inline VirtProcr * +SSR__create_procr_helper( VirtProcrFnPtr fnPtr, void *initData, + SSRSemEnv *semEnv, int32 coreToScheduleOnto ) + { VirtProcr *newPr; + SSRSemData semData; //This is running in master, so use internal version - newPr = VMS__create_procr( semReq->fnPtr, semReq->initData ); + newPr = VMS__create_procr( fnPtr, initData ); semEnv->numVirtPr += 1; - //Assign new processor to a core & transition it to ready + semData = VMS__malloc( sizeof(SSRSemData) ); + semData->highestTransEntered = -1; + semData->lastTransEntered = NULL; + + //=================== Assign new processor to a core ===================== #ifdef SEQUENTIAL newPr->coreAnimatedBy = 0; #else - int32 - coreToScheduleOnto = semReq->coreToScheduleOnto; if(coreToScheduleOnto < 0 || coreToScheduleOnto >= NUM_CORES ) { //out-of-range, so round-robin assignment @@ -177,7 +181,21 @@ { newPr->coreAnimatedBy = coreToScheduleOnto; } #endif + //======================================================================== + + return newPr; + } +void +handleCreate( VMSReqst *req, VirtProcr *requestingPr, SSRSemEnv *semEnv ) + { SSRSemReq *semReq; + VirtProcr *newPr; + + semReq = VMS__take_sem_reqst_from( req ); + + newPr = SSR__create_procr_helper( semReq->fnPtr, semReq->initData, semEnv, + semReq->coreToScheduleOnto ); + //For SSR, caller needs ptr to created processor returned to it requestingPr->dataRetFromReq = newPr; diff -r bf57b83019e5 -r cee3eecc5c22 SSR_Request_Handlers.c --- a/SSR_Request_Handlers.c Tue Nov 02 16:57:45 2010 -0700 +++ b/SSR_Request_Handlers.c Mon Nov 08 04:02:50 2010 -0800 @@ -118,7 +118,8 @@ SSRSemReq *clonedReq = cloneReq( semReq ); clonedReq-> nextReqInHashEntry = waitingReq->nextReqInHashEntry; waitingReq->nextReqInHashEntry = clonedReq; - PRINT2_DEBUG("linked requests: %d, %d | ", clonedReq, waitingReq ) + DEBUG2( dbgRqstHdlr, "linked requests: %d, %d | ", clonedReq,\ + waitingReq ) return; } else @@ -265,7 +266,7 @@ } //attach msg that's in the send request to receiving procr - // when comes back from suspend, will have msg in dataReturnedFromReq + // when comes back from suspend, will have msg in dataRetFromReq receivePr->dataRetFromReq = waitingReq->msg; //bring both processors back from suspend diff -r bf57b83019e5 -r cee3eecc5c22 SSR_lib.c --- a/SSR_lib.c Tue Nov 02 16:57:45 2010 -0700 +++ b/SSR_lib.c Mon Nov 08 04:02:50 2010 -0800 @@ -103,13 +103,11 @@ //SSR starts with one processor, which is put into initial environ, // and which then calls create() to create more, thereby expanding work - seedPr = VMS__create_procr( fnPtr, initData ); + seedPr = SSR__create_procr_helper( fnPtr, initData, + semEnv, semEnv->nextCoreToGetNewPr++ ); - seedPr->coreAnimatedBy = semEnv->nextCoreToGetNewPr++; - - writePrivQ( seedPr, semEnv->readyVPQs[seedPr->coreAnimatedBy] ); - semEnv->numVirtPr = 1; - + resumePr( seedPr, semEnv ); + #ifdef SEQUENTIAL VMS__start_the_work_then_wait_until_done_Seq(); //debug sequential exe #else @@ -221,6 +219,7 @@ semanticEnv->readyVPQs = readyVPQs; semanticEnv->nextCoreToGetNewPr = 0; + semanticEnv->numVirtPr = 0; semanticEnv->commHashTbl = makeHashTable( 1<<16, &VMS__free );//start big @@ -232,9 +231,6 @@ semanticEnv->singletonHasBeenExecutedFlags[i] = FALSE; semanticEnv->transactionStrucs[i].waitingVPQ = makePrivQ(); } - - - } @@ -568,4 +564,4 @@ reqData.transID = transactionID; VMS__send_sem_request( &reqData, animPr ); - } \ No newline at end of file + }