changeset 28:91caa8a9d591 ML_dev

Back to compile process, fixing compile errors
author Sean Halle <seanhalle@yahoo.com>
date Tue, 05 Feb 2013 20:24:25 -0800
parents 3b30da4643d1
children dd1efbf29ff9
files VSs.c VSs.h VSs_PluginFns.c VSs_Request_Handlers.c VSs_Request_Handlers.h VSs_SS.c
diffstat 6 files changed, 179 insertions(+), 163 deletions(-) [+]
line diff
     1.1 --- a/VSs.c	Sat Jan 12 11:31:51 2013 -0800
     1.2 +++ b/VSs.c	Tue Feb 05 20:24:25 2013 -0800
     1.3 @@ -161,7 +161,7 @@
     1.4     reqData.fnPtr            = fnPtr;
     1.5     reqData.initData         = initData;
     1.6     
     1.7 -   PR_WL__send_create_slaveVP_req( &reqData, thdID, &handleCreateThd,
     1.8 +   PR_WL__send_create_slaveVP_req( &reqData, thdID, (CreateHandler)&handleCreateThd,
     1.9                                                  creatingThd, VSs_MAGIC_NUMBER );
    1.10     return (SlaveVP *)creatingThd->dataRetFromReq;
    1.11   }
    1.12 @@ -177,7 +177,8 @@
    1.13  VSs__end_thread( SlaveVP *thdToEnd )
    1.14   {    
    1.15     //the lang request is null for VSs version of end slave 
    1.16 -   PR_WL__send_end_slave_req( NULL, &handleDissipate, thdToEnd, VSs_MAGIC_NUMBER );
    1.17 +   PR_WL__send_end_slave_req( NULL, (RequestHandler)&handleDissipate, thdToEnd, 
    1.18 +                              VSs_MAGIC_NUMBER );
    1.19   }
    1.20  
    1.21  
    1.22 @@ -258,7 +259,8 @@
    1.23     reqData.reqType      = taskwait;
    1.24     reqData.callingSlv   = animSlv;
    1.25     
    1.26 -   PR_WL__send_lang_request( &reqData, &handleTaskwait, animSlv, VSs_MAGIC_NUMBER );
    1.27 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleTaskwait, animSlv,
    1.28 +                             VSs_MAGIC_NUMBER );
    1.29   }
    1.30  
    1.31  
    1.32 @@ -266,7 +268,8 @@
    1.33  //==========================  send and receive ============================
    1.34  //
    1.35  
    1.36 -inline int32 *
    1.37 +inline 
    1.38 +int32 *
    1.39  VSs__give_self_taskID( SlaveVP *animSlv )
    1.40   {
    1.41     return PR__give_ID_from_slave( animSlv, VSs_MAGIC_NUMBER );
    1.42 @@ -288,7 +291,8 @@
    1.43     
    1.44     reqData.nextReqInHashEntry = NULL;
    1.45  
    1.46 -   PR_WL__send_lang_request( &reqData, &handleSendTypeTo, senderSlv, VSs_MAGIC_NUMBER );
    1.47 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleSendTypeTo,
    1.48 +                                                  senderSlv, VSs_MAGIC_NUMBER );
    1.49  
    1.50        //When come back from suspend, no longer own data reachable from msg
    1.51   }
    1.52 @@ -306,7 +310,8 @@
    1.53  
    1.54     reqData.nextReqInHashEntry = NULL;
    1.55  
    1.56 -   PR_WL__send_lang_request( &reqData, &handleSendFromTo, senderSlv, VSs_MAGIC_NUMBER );
    1.57 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleSendFromTo,
    1.58 +                                                  senderSlv, VSs_MAGIC_NUMBER );
    1.59   }
    1.60  
    1.61  
    1.62 @@ -331,7 +336,8 @@
    1.63     
    1.64     reqData.nextReqInHashEntry = NULL;
    1.65  
    1.66 -   PR_WL__send_lang_request( &reqData, &handleReceiveTypeTo, receiverSlv, VSs_MAGIC_NUMBER );
    1.67 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleReceiveTypeTo,
    1.68 +                                                receiverSlv, VSs_MAGIC_NUMBER );
    1.69     
    1.70     return receiverSlv->dataRetFromReq;
    1.71   }
    1.72 @@ -356,7 +362,8 @@
    1.73     reqData.nextReqInHashEntry = NULL;
    1.74        DEBUG__printf2(dbgRqstHdlr,"WL: receive from %d to: %d", reqData.senderID[1], reqData.receiverID[1]);
    1.75        
    1.76 -   PR_WL__send_lang_request( &reqData, &handleReceiveFromTo, receiverSlv, VSs_MAGIC_NUMBER );
    1.77 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleReceiveFromTo,
    1.78 +                             receiverSlv, VSs_MAGIC_NUMBER );
    1.79  
    1.80     return receiverSlv->dataRetFromReq;
    1.81   }
    1.82 @@ -392,11 +399,12 @@
    1.83     reqData.reqType     = singleton_fn_start;
    1.84     reqData.singletonID = singletonID;
    1.85  
    1.86 -   PR_WL__send_lang_request( &reqData, &handleStartFnSingleton, animSlv, VSs_MAGIC_NUMBER );
    1.87 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleStartFnSingleton,
    1.88 +                             animSlv, VSs_MAGIC_NUMBER );
    1.89     if( animSlv->dataRetFromReq ) //will be 0 or addr of label in end singleton
    1.90      {
    1.91        VSsLangEnv *langEnv =
    1.92 -              PR_int__give_lang_env_for_slave__ML( animSlv, VSs_MAGIC_NUMBER );
    1.93 +              PR_int__give_lang_env_for_slave( animSlv, VSs_MAGIC_NUMBER );
    1.94        asm_write_ret_from_singleton(&(langEnv->fnSingletons[ singletonID]));
    1.95      }
    1.96   }
    1.97 @@ -416,7 +424,8 @@
    1.98     reqData.reqType          = singleton_data_start;
    1.99     reqData.singletonPtrAddr = singletonAddr;
   1.100  
   1.101 -   PR_WL__send_lang_request( &reqData, &handleStartDataSingleton, animSlv, VSs_MAGIC_NUMBER );
   1.102 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleStartDataSingleton,
   1.103 +                             animSlv, VSs_MAGIC_NUMBER );
   1.104     if( animSlv->dataRetFromReq ) //either 0 or end singleton's return addr
   1.105      {    //Assembly code changes the return addr on the stack to the one
   1.106           // saved into the singleton by the end-singleton-fn
   1.107 @@ -442,14 +451,15 @@
   1.108        //don't need this addr until after at least one singleton has reached
   1.109        // this function
   1.110     VSsLangEnv *
   1.111 -   langEnv = PR_int__give_lang_env_for_slave__ML( animSlv, VSs_MAGIC_NUMBER );
   1.112 +   langEnv = PR_int__give_lang_env_for_slave( animSlv, VSs_MAGIC_NUMBER );
   1.113     
   1.114     asm_write_ret_from_singleton(&(langEnv->fnSingletons[ singletonID]));
   1.115  
   1.116     reqData.reqType     = singleton_fn_end;
   1.117     reqData.singletonID = singletonID;
   1.118  
   1.119 -   PR_WL__send_lang_request( &reqData, &handleEndFnSingleton, animSlv, VSs_MAGIC_NUMBER );
   1.120 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleEndFnSingleton, 
   1.121 +                             animSlv, VSs_MAGIC_NUMBER );
   1.122  
   1.123  EndSingletonInstrAddr:
   1.124     return;
   1.125 @@ -471,7 +481,8 @@
   1.126     reqData.reqType          = singleton_data_end;
   1.127     reqData.singletonPtrAddr = singletonPtrAddr;
   1.128  
   1.129 -   PR_WL__send_lang_request( &reqData, &handleEndDataSingleton, animSlv, VSs_MAGIC_NUMBER );
   1.130 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleEndDataSingleton,
   1.131 +                             animSlv, VSs_MAGIC_NUMBER );
   1.132   }
   1.133  
   1.134  /*This executes the function in the masterVP, so it executes in isolation
   1.135 @@ -495,7 +506,8 @@
   1.136     reqData.fnToExecInMaster = ptrToFnToExecInMaster;
   1.137     reqData.dataForFn        = data;
   1.138  
   1.139 -   PR_WL__send_lang_request( &reqData, &handleAtomic, animSlv, VSs_MAGIC_NUMBER );
   1.140 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleAtomic, 
   1.141 +                             animSlv, VSs_MAGIC_NUMBER );
   1.142   }
   1.143  
   1.144  
   1.145 @@ -522,7 +534,8 @@
   1.146     reqData.reqType     = trans_start;
   1.147     reqData.transID     = transactionID;
   1.148  
   1.149 -   PR_WL__send_lang_request( &reqData, &handleTransStart, animSlv, VSs_MAGIC_NUMBER );
   1.150 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleTransStart,
   1.151 +                             animSlv, VSs_MAGIC_NUMBER );
   1.152   }
   1.153  
   1.154  /*This suspends to the master, then uses transactionID as index into an
   1.155 @@ -544,7 +557,8 @@
   1.156     reqData.reqType     = trans_end;
   1.157     reqData.transID     = transactionID;
   1.158  
   1.159 -   PR_WL__send_lang_request( &reqData, &handleTransEnd, animSlv, VSs_MAGIC_NUMBER );
   1.160 +   PR_WL__send_lang_request( &reqData, (RequestHandler)&handleTransEnd,
   1.161 +                             animSlv, VSs_MAGIC_NUMBER );
   1.162   }
   1.163  
   1.164  //======================== Internal ==================================
     2.1 --- a/VSs.h	Sat Jan 12 11:31:51 2013 -0800
     2.2 +++ b/VSs.h	Tue Feb 05 20:24:25 2013 -0800
     2.3 @@ -366,13 +366,8 @@
     2.4                              SlaveVP *creatingSlv, int32 coreToAssignOnto);
     2.5  
     2.6  //=====================    =====================
     2.7 -inline 
     2.8 -void *
     2.9 -handleSubmitTask( VSsLangReq *langReq, VSsLangEnv *langEnv );
    2.10 -inline 
    2.11 -void
    2.12 -handleEndTask( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv );
    2.13  
    2.14 +#include "VSs_Request_Handlers.h"
    2.15  
    2.16  //=====================  Measurement of Lang Overheads  =====================
    2.17  #include "Measurement/VSs_Measurement.h"
     3.1 --- a/VSs_PluginFns.c	Sat Jan 12 11:31:51 2013 -0800
     3.2 +++ b/VSs_PluginFns.c	Tue Feb 05 20:24:25 2013 -0800
     3.3 @@ -13,7 +13,7 @@
     3.4  
     3.5  //=========================== Local Fn Prototypes ===========================
     3.6  void
     3.7 -resume_slaveVP( SlaveVP *slave, VSsLangEnv *langEnv );
     3.8 +VSs__resume_slave( SlaveVP *slave, VSsLangEnv *langEnv );
     3.9  
    3.10  inline void
    3.11  handleLangReq( PRReqst *req, SlaveVP *requestingSlv, VSsLangEnv *langEnv );
    3.12 @@ -51,12 +51,11 @@
    3.13   * to suspend both kinds, but also to keep explicit slave stacks clean from
    3.14   * the junk tasks are allowed to leave behind.
    3.15   */
    3.16 -SlaveVP *
    3.17 +void
    3.18  VSs__assign_work_to_slot( void *_langEnv, AnimSlot *slot )
    3.19   { SlaveVP     *returnSlv;
    3.20     VSsLangEnv  *langEnv;
    3.21     int32        coreNum, slotNum;
    3.22 -   PRMetaTask  *returnMetaTask = NULL;
    3.23     VSsTaskStub *newTaskStub;
    3.24    
    3.25     coreNum = slot->coreSlotIsOn;
    3.26 @@ -68,19 +67,26 @@
    3.27     returnSlv = readPrivQ( langEnv->slavesReadyToResumeQ );
    3.28     if( returnSlv != NULL )  //Yes, have a slave, so return it.
    3.29      { returnSlv->coreAnimatedBy   = coreNum;
    3.30 -      //returnMetaTask = returnSlv->metaTask;
    3.31 -      fixme; //use PR_int__put_slave_into_slot( SlaveVP *slave, AnimSlot *slot )
    3.32 -      goto ReturnTheMetaTask;
    3.33 +      
    3.34 +      fixme; //check that putting into slot and call chain are correct
    3.35 +      PR_int__put_slave_into_slot( returnSlv, slot );
    3.36 +      goto Success;
    3.37      }
    3.38     
    3.39 +      //No ready slaves, so check for ready tasks
    3.40     newTaskStub = readPrivQ( langEnv->taskReadyQ );
    3.41     if( newTaskStub != NULL )
    3.42 -    { //returnMetaTask = newTaskStub->protoMetaTask;
    3.43 -      fixme; //use PR_int__put_task_into_slot( SlaveVP *slave, AnimSlot *slot )    
    3.44 -      goto ReturnTheMetaTask;
    3.45 +    { 
    3.46 +      fixme; //check that putting into slot and call chain are correct
    3.47 +      PR_int__put_task_into_slot( newTaskStub, slot );    
    3.48 +      goto Success;
    3.49      }
    3.50 +   
    3.51 +   //If here, didn't assign any work
    3.52 + Fail:
    3.53 +   fixme; //figure out what to do -- go through holistic code still?
    3.54  
    3.55 -ReturnTheMetaTask:  //doing gotos to here should help with holistic..
    3.56 + Success:  //doing gotos to here should help with holistic..
    3.57  
    3.58     #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    3.59     //This no longer works -- should be moved into PR in master
    3.60 @@ -105,7 +111,7 @@
    3.61           newD.to_task = returnSlv->numTimesAssignedToASlot;
    3.62           addToListOfArrays(Dependency, newD, langEnv->ctlDependenciesList);  
    3.63         }
    3.64 -      returnMetaTask = returnSlv->metaTask;
    3.65 +      returnMetaTask = returnSlv->metaTasks;
    3.66      }
    3.67     else //returnSlv != NULL
    3.68      { //assignSlv->numTimesAssigned++;
    3.69 @@ -125,72 +131,24 @@
    3.70           prev_in_slot;        
    3.71      }
    3.72     #endif
    3.73 +/* PR handles work available in lang env and in process..
    3.74     if( isEmptyPrivQ(langEnv->slavesReadyToResumeQ) &&
    3.75         isEmptyPrivQ(langEnv->taskReadyQ) ) 
    3.76        PR_int__clear_work_in_lang_env(langEnv);
    3.77 -      
    3.78 -   return( returnMetaTask );
    3.79 + */
    3.80 + 
    3.81 +   return;
    3.82   }
    3.83  
    3.84  
    3.85 -//===========================  Request Handler  ============================
    3.86 -//
    3.87 -/*
    3.88 - * (Not inline because invoked indirectly via a pointer)
    3.89 - */
    3.90 -
    3.91 -void
    3.92 -handleLangReq( void *_langReq, SlaveVP *reqSlv, VSsLangEnv *langEnv )
    3.93 - { VSsLangReq *langReq;
    3.94 -
    3.95 -   langReq = (VSsLangReq *)_langReq;
    3.96 -   if( langReq == NULL ) return;
    3.97 -   
    3.98 -   switch( langReq->reqType )  //lang handlers are all in other file
    3.99 -    {
   3.100 -      case send_type_to:    handleSendTypeTo(   langReq,         langEnv);
   3.101 -         break;
   3.102 -      case send_from_to:    handleSendFromTo(   langReq,         langEnv);
   3.103 -         break;
   3.104 -      case receive_type_to: handleReceiveTypeTo(langReq,         langEnv);
   3.105 -         break;
   3.106 -      case receive_from_to: handleReceiveFromTo(langReq,         langEnv);
   3.107 -         break;
   3.108 -      case taskwait:        handleTaskwait(     langReq, reqSlv, langEnv);
   3.109 -           break;
   3.110 -         
   3.111 -      //====================================================================
   3.112 -      case malloc_req:      handleMalloc(       langReq, reqSlv, langEnv);
   3.113 -         break;
   3.114 -      case free_req:        handleFree(         langReq, reqSlv, langEnv);
   3.115 -         break;
   3.116 -      case singleton_fn_start:  handleStartFnSingleton(langReq, reqSlv, langEnv);
   3.117 -         break;
   3.118 -      case singleton_fn_end:    handleEndFnSingleton(  langReq, reqSlv, langEnv);
   3.119 -         break;
   3.120 -      case singleton_data_start:handleStartDataSingleton(langReq,reqSlv,langEnv);
   3.121 -         break;
   3.122 -      case singleton_data_end:  handleEndDataSingleton(langReq, reqSlv, langEnv);
   3.123 -         break;
   3.124 -      case atomic:          handleAtomic(       langReq, reqSlv, langEnv);
   3.125 -         break;
   3.126 -      case trans_start:     handleTransStart(   langReq, reqSlv, langEnv);
   3.127 -         break;
   3.128 -      case trans_end:       handleTransEnd(     langReq, reqSlv, langEnv);
   3.129 -         break;
   3.130 -    }
   3.131 - }
   3.132 -
   3.133 -
   3.134 -
   3.135  
   3.136  //=========================== Helper ==============================
   3.137  void
   3.138 -resume_slaveVP( SlaveVP *slave, VSsLangEnv *langEnv )
   3.139 +VSs__resume_slave( SlaveVP *slave, VSsLangEnv *langEnv )
   3.140   {
   3.141        //both suspended tasks and suspended explicit slaves resumed with this
   3.142     writePrivQ( slave, langEnv->slavesReadyToResumeQ );
   3.143 -   PR_int__set_work_in_lang_env(langEnv);
   3.144 +//PR handles this..   PR_int__set_work_in_lang_env(langEnv);
   3.145     
   3.146     #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
   3.147  /*
     4.1 --- a/VSs_Request_Handlers.c	Sat Jan 12 11:31:51 2013 -0800
     4.2 +++ b/VSs_Request_Handlers.c	Tue Feb 05 20:24:25 2013 -0800
     4.3 @@ -18,7 +18,7 @@
     4.4  
     4.5  //=========================== Local Fn Prototypes ===========================
     4.6  void
     4.7 -resume_slaveVP( SlaveVP *slave, VSsLangEnv *langEnv );
     4.8 +VSs__resume_slave( SlaveVP *slave, VSsLangEnv *langEnv );
     4.9  
    4.10  
    4.11  
    4.12 @@ -90,8 +90,8 @@
    4.13     VSsTaskStub* newStub;
    4.14     
    4.15        //Create a new task stub, with enough room at end to copy args there
    4.16 -   newStub = (VSsTaskStub *)PR_int__create_lang_meta_task__ML( 
    4.17 -        sizeof(VSsTaskStub) + taskType->sizeOfArgs, VSs_MAGIC_NUMBER );
    4.18 +   newStub = (VSsTaskStub *)PR_int__create_lang_meta_task( 
    4.19 +    sizeof(VSsTaskStub) + taskType->sizeOfArgs, &VSs__lang_meta_task_freer, VSs_MAGIC_NUMBER );
    4.20     
    4.21     newStub->numBlockingProp     = taskType->numCtldArgs;
    4.22     newStub->taskType            = taskType;
    4.23 @@ -112,13 +112,24 @@
    4.24     return newStub;
    4.25   }
    4.26  
    4.27 +void
    4.28 +VSs__lang_meta_task_freer( void *_langMetaTask )
    4.29 + { //no malloc'd structs inside task stub, so nothing to do
    4.30 + }
    4.31 +
    4.32 +void * 
    4.33 +VSs__create_empty_lang_meta_task_in_slave( SlaveVP *slave )
    4.34 + { 
    4.35 +   return (void *)VSs__create_generic_slave_task_stub_in_slave( slave );
    4.36 + }
    4.37 +
    4.38  
    4.39  VSsTaskStub *
    4.40  VSs__create_generic_slave_task_stub_in_slave( SlaveVP *slave )
    4.41   { VSsTaskStub *newStub;
    4.42   
    4.43 -   newStub = (VSsTaskStub *)PR_int__create_lang_meta_task_in_slave__ML( 
    4.44 -                                 sizeof(VSsTaskStub), slave, VSs_MAGIC_NUMBER );
    4.45 +   newStub = (VSsTaskStub *)PR_int__create_lang_meta_task_in_slave( 
    4.46 +      sizeof(VSsTaskStub), &VSs__lang_meta_task_freer, slave, VSs_MAGIC_NUMBER );
    4.47     newStub->numBlockingProp     = 0;
    4.48     newStub->taskType            = NULL;
    4.49     newStub->ptrEntries          = NULL; 
    4.50 @@ -130,6 +141,30 @@
    4.51     return newStub;
    4.52   }
    4.53  
    4.54 +/*Initialize semantic data struct..  this initializer doesn't need any input,
    4.55 + * but some languages may need something from inside the request that was sent
    4.56 + * to create a slave..  in that case, just make initializer do the malloc then
    4.57 + * use the PR_PI__give_lang_data  inside the create handler, and fill in the
    4.58 + * langData values there.
    4.59 + */
    4.60 +void * 
    4.61 +VSs__create_lang_data_in_slave( SlaveVP *slave )
    4.62 + { VSsLangData *langData;
    4.63 +
    4.64 + 
    4.65 +   langData = PR_PI__create_lang_data_in_slave( sizeof(VSsLangData), 
    4.66 +                                 &VSs__langDataFreer, slave, VSs_MAGIC_NUMBER );
    4.67 +   
    4.68 +   langData->highestTransEntered = -1;
    4.69 +   langData->lastTransEntered    = NULL;
    4.70 +   return langData;
    4.71 + }
    4.72 +
    4.73 +void
    4.74 +VSs__langDataFreer( void *_langData )
    4.75 + { //no extra structs have been malloc'd into the lang data, so nothing to do 
    4.76 + }
    4.77 +
    4.78  inline 
    4.79  VSsTaskStubCarrier *
    4.80  create_task_carrier( VSsTaskStub *taskStub, int32 argNum, int32 rdOrWrite )
    4.81 @@ -168,7 +203,9 @@
    4.82     langReq = (VSsLangReq *) _langReq;
    4.83     langEnv = (VSsLangEnv *) _langEnv;
    4.84     
    4.85 -   newSlv  = PR_int__create_slave( langReq->fnPtr, langReq->initData );
    4.86 +   newSlv  = PR_PI__create_slave( langReq->fnPtr, langReq->initData );
    4.87 +   
    4.88 +   VSs__create_lang_data_in_slave( newSlv );
    4.89     
    4.90     parentTaskStub = PR_PI__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER );
    4.91     parentTaskStub->numLiveChildThreads += 1;
    4.92 @@ -217,35 +254,19 @@
    4.93  
    4.94        //For VSs, caller needs ptr to created thread returned to it
    4.95     requestingSlv->dataRetFromReq = newSlv;
    4.96 -   resume_slaveVP(requestingSlv , langEnv );
    4.97 -   resume_slaveVP( newSlv,        langEnv );
    4.98 +   PR_PI__make_slave_ready(requestingSlv , langEnv );
    4.99 +   PR_PI__make_slave_ready( newSlv,        langEnv );
   4.100     
   4.101     return newSlv;
   4.102   }
   4.103  
   4.104 -/*Initialize semantic data struct..  this initializer doesn't need any input,
   4.105 - * but some languages may need something from inside the request that was sent
   4.106 - * to create a slave..  in that case, just make initializer do the malloc then
   4.107 - * use the PR_PI__give_lang_data  inside the create handler, and fill in the
   4.108 - * langData values there.
   4.109 - */
   4.110 -void * 
   4.111 -createInitialSemanticData( )
   4.112 - { VSsLangData *langData;
   4.113 - 
   4.114 -   langData = PR_PI__malloc( sizeof(VSsLangData) );
   4.115 -   
   4.116 -   langData->highestTransEntered = -1;
   4.117 -   langData->lastTransEntered    = NULL;
   4.118 -   return langData;
   4.119 - }
   4.120  
   4.121  /*SlaveVP dissipate -- this is NOT task-end!, only call this to end explicitly
   4.122   * created threads
   4.123   */
   4.124  //inline
   4.125  void
   4.126 -handleDissipate( SlaveVP *requestingSlv, VSsLangEnv *langEnv )
   4.127 +handleDissipate( void *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv )
   4.128   { 
   4.129     VSsTaskStub  *parentTaskStub, *ownTaskStub;
   4.130   
   4.131 @@ -271,7 +292,7 @@
   4.132        if( parentTaskStub->isWaitingForChildTasksToEnd )
   4.133          return; //still waiting on tasks (should be impossible)
   4.134        else //parent free to resume
   4.135 -        resume_slaveVP( PR_PI__give_slave_lang_meta_task_assigned_to(parentTaskStub), langEnv );
   4.136 +        PR_PI__make_slave_ready( PR_PI__give_slave_lang_meta_task_is_assigned_to(parentTaskStub), langEnv );
   4.137      }
   4.138     
   4.139        //check if this is last child of ended parent (note, not possible to
   4.140 @@ -286,6 +307,7 @@
   4.141        //PR frees the langData, task stub and requesting slave's base state
   4.142     return; 
   4.143   }
   4.144 +
   4.145  inline
   4.146  void
   4.147  handleShutdownDissipate( SlaveVP *requestingSlv, VSsLangEnv *langEnv )
   4.148 @@ -308,9 +330,14 @@
   4.149  void
   4.150  freeVSsLangData( void *_langData )
   4.151   { //
   4.152 +   fixme; //check -- PR should handle freeing the lang data itself.
   4.153 +   //this should only free stuff malloc'd into the langData
   4.154     PR_PI__free( _langData );
   4.155   }
   4.156  
   4.157 +/*Will be used by a landData recycler, when (and if) such a thing added
   4.158 +  to PR
   4.159 + */
   4.160  void 
   4.161  resetVSsLangData( void *_langData ) 
   4.162   { VSsLangData *langData = (VSsLangData *)_langData;
   4.163 @@ -479,8 +506,8 @@
   4.164               * the hash-entry's count of enabled and non-finished readers.*/
   4.165              taskStub->numBlockingProp -= 1;
   4.166              if( taskStub->numBlockingProp == 0 )
   4.167 -             { writePrivQ( taskStub, langEnv->taskReadyQ );
   4.168 -               PR_int__set_work_in_lang_env( langEnv ); 
   4.169 +             { PR_PI__make_task_ready( taskStub, langEnv );
   4.170 +               //PR_int__set_work_in_lang_env( langEnv ); 
   4.171               }
   4.172              ptrEntry->numEnabledNonDoneReaders += 1;
   4.173            }
   4.174 @@ -503,8 +530,8 @@
   4.175                * into the readyQ.*/
   4.176              taskStub->numBlockingProp -= 1;
   4.177              if( taskStub->numBlockingProp == 0 )
   4.178 -             { writePrivQ( taskStub, langEnv->taskReadyQ );
   4.179 -               PR_int__set_work_in_lang_env( langEnv ); 
   4.180 +             { PR_PI__make_task_ready( taskStub, langEnv );
   4.181 +               //PR_int__set_work_in_lang_env( langEnv ); 
   4.182               }
   4.183              ptrEntry->hasEnabledNonFinishedWriter = TRUE;
   4.184            }
   4.185 @@ -517,7 +544,7 @@
   4.186      } //for argNum
   4.187     
   4.188        //resume the parent, creator
   4.189 -   resume_slaveVP( langReq->callingSlv, langEnv );
   4.190 +   PR_PI__make_slave_ready( langReq->callingSlv, langEnv );
   4.191  
   4.192     return taskStub;
   4.193   }
   4.194 @@ -569,7 +596,7 @@
   4.195     VSsPointerEntry **ptrEntries;
   4.196           
   4.197     endingTaskStub   = 
   4.198 -    (VSsTaskStub *)PR_int__give_lang_meta_task_from_slave__ML( requestingSlv, VSs_MAGIC_NUMBER );
   4.199 +    (VSsTaskStub *)PR_int__give_lang_meta_task_from_slave( requestingSlv, VSs_MAGIC_NUMBER );
   4.200  
   4.201     args             = endingTaskStub->args;
   4.202     endingTaskType   = endingTaskStub->taskType;
   4.203 @@ -584,7 +611,7 @@
   4.204         parentStub->numLiveChildTasks == 0)
   4.205      {
   4.206        parentStub->isWaitingForChildTasksToEnd = FALSE;
   4.207 -      resume_slaveVP( PR_PI__give_slave_lang_meta_task_assigned_to(parentStub), langEnv );
   4.208 +      PR_PI__make_slave_ready( PR_PI__give_slave_lang_meta_task_is_assigned_to(parentStub), langEnv );
   4.209      }
   4.210     
   4.211        //Check if parent ended, and this was last descendent, then free it
   4.212 @@ -628,8 +655,8 @@
   4.213              // task-stub into the readyQ.
   4.214              waitingTaskStub->numBlockingProp -= 1;
   4.215              if( waitingTaskStub->numBlockingProp == 0 )
   4.216 -             { writePrivQ( waitingTaskStub, langEnv->taskReadyQ );
   4.217 -               PR_int__set_work_in_lang_env( langEnv ); 
   4.218 +             { PR_PI__make_task_ready( waitingTaskStub, langEnv );
   4.219 +               //PR_int__set_work_in_lang_env( langEnv ); 
   4.220               }
   4.221            }
   4.222         }
   4.223 @@ -653,8 +680,8 @@
   4.224              // If it becomes zero, then put the task-stub into the readyQ.
   4.225              waitingTaskStub->numBlockingProp -= 1;
   4.226              if( waitingTaskStub->numBlockingProp == 0 )
   4.227 -             { writePrivQ( waitingTaskStub, langEnv->taskReadyQ );
   4.228 -               PR_int__set_work_in_lang_env( langEnv ); 
   4.229 +             { PR_PI__make_task_ready( waitingTaskStub, langEnv );
   4.230 +               //PR_int__set_work_in_lang_env( langEnv ); 
   4.231               }
   4.232            }
   4.233           else
   4.234 @@ -670,8 +697,8 @@
   4.235                 // into the readyQ.
   4.236                 waitingTaskStub->numBlockingProp -= 1;
   4.237                 if( waitingTaskStub->numBlockingProp == 0 )
   4.238 -                { writePrivQ( waitingTaskStub, langEnv->taskReadyQ );
   4.239 -                  PR_int__set_work_in_lang_env( langEnv ); 
   4.240 +                { PR_PI__make_task_ready( waitingTaskStub, langEnv );
   4.241 +                  //PR_int__set_work_in_lang_env( langEnv ); 
   4.242                  }
   4.243                 //Get next waiting task
   4.244                 waitingTaskCarrier = peekPrivQ( ptrEntry->waitersQ );
   4.245 @@ -772,7 +799,7 @@
   4.246   */
   4.247  //inline 
   4.248  void
   4.249 -handleSendTypeTo( VSsLangReq *langReq, VSsLangEnv *langEnv )
   4.250 +handleSendTypeTo( VSsLangReq *langReq, SlaveVP *reqSlave, VSsLangEnv *langEnv )
   4.251   { SlaveVP    *senderSlv, *receiverSlv;
   4.252     int32      *senderID, *receiverID;
   4.253     int32      *key, keySz, receiverIDNumInt;
   4.254 @@ -780,6 +807,8 @@
   4.255     HashEntry  *entry;
   4.256     HashTable  *commHashTbl = langEnv->commHashTbl;
   4.257     
   4.258 +      //Note, don't use reqSlave, but need it to match RequestHandler signature
   4.259 +   
   4.260     receiverID  = langReq->receiverID; //For "send", know both send & recv procrs
   4.261     senderSlv   = langReq->senderSlv;
   4.262  
   4.263 @@ -860,8 +889,8 @@
   4.264        receiverSlv->dataRetFromReq = langReq->msg;
   4.265  
   4.266           //bring both processors back from suspend
   4.267 -      resume_slaveVP( senderSlv,   langEnv );
   4.268 -      resume_slaveVP( receiverSlv, langEnv );
   4.269 +      PR_PI__make_slave_ready( senderSlv,   langEnv );
   4.270 +      PR_PI__make_slave_ready( receiverSlv, langEnv );
   4.271  
   4.272        return;
   4.273      }
   4.274 @@ -878,7 +907,7 @@
   4.275  //TODO: combine both send handlers into single handler
   4.276  //inline 
   4.277  void
   4.278 -handleSendFromTo( VSsLangReq *langReq, VSsLangEnv *langEnv)
   4.279 +handleSendFromTo( VSsLangReq *langReq, SlaveVP *dummySlave, VSsLangEnv *langEnv)
   4.280   { SlaveVP     *senderSlv, *receiverSlv;
   4.281     int32       *senderID, *receiverID;
   4.282     int32       *key, keySz, receiverIDNumInt, senderIDNumInt;
   4.283 @@ -944,8 +973,8 @@
   4.284        receiverSlv->dataRetFromReq = langReq->msg;
   4.285  
   4.286           //bring both processors back from suspend
   4.287 -      resume_slaveVP( senderSlv,   langEnv );
   4.288 -      resume_slaveVP( receiverSlv, langEnv );
   4.289 +      PR_PI__make_slave_ready( senderSlv,   langEnv );
   4.290 +      PR_PI__make_slave_ready( receiverSlv, langEnv );
   4.291              
   4.292        return;
   4.293      }
   4.294 @@ -959,7 +988,7 @@
   4.295  
   4.296  //inline 
   4.297  void
   4.298 -handleReceiveTypeTo( VSsLangReq *langReq, VSsLangEnv *langEnv)
   4.299 +handleReceiveTypeTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv)
   4.300   { SlaveVP    *senderSlv, *receiverSlv;
   4.301     int32      *receiverID;
   4.302     int32      *key, keySz, receiverIDNumInt;
   4.303 @@ -1032,8 +1061,8 @@
   4.304          addToListOfArrays(Unit,u,langEnv->ntonGroups[groupId]->receivers);
   4.305         #endif
   4.306        
   4.307 -      resume_slaveVP( senderSlv,   langEnv );
   4.308 -      resume_slaveVP( receiverSlv, langEnv );
   4.309 +      PR_PI__make_slave_ready( senderSlv,   langEnv );
   4.310 +      PR_PI__make_slave_ready( receiverSlv, langEnv );
   4.311  
   4.312        return;
   4.313      }
   4.314 @@ -1045,7 +1074,7 @@
   4.315   */
   4.316  //inline 
   4.317  void
   4.318 -handleReceiveFromTo( VSsLangReq *langReq, VSsLangEnv *langEnv)
   4.319 +handleReceiveFromTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv)
   4.320   { SlaveVP     *senderSlv, *receiverSlv;
   4.321     int32       *senderID,  *receiverID;
   4.322     int32       *key, keySz, receiverIDNumInt, senderIDNumInt;
   4.323 @@ -1102,8 +1131,8 @@
   4.324           //bring both processors back from suspend
   4.325        PR_PI__free( waitingReq );
   4.326  
   4.327 -      resume_slaveVP( senderSlv,   langEnv );
   4.328 -      resume_slaveVP( receiverSlv, langEnv );
   4.329 +      PR_PI__make_slave_ready( senderSlv,   langEnv );
   4.330 +      PR_PI__make_slave_ready( receiverSlv, langEnv );
   4.331  
   4.332        return;
   4.333      }
   4.334 @@ -1126,7 +1155,7 @@
   4.335     
   4.336     if( taskStub->numLiveChildTasks == 0 )
   4.337      {    //nobody to wait for, resume
   4.338 -      resume_slaveVP( requestingSlv, langEnv );
   4.339 +      PR_PI__make_slave_ready( requestingSlv, langEnv );
   4.340      }
   4.341     else  //have to wait, mark waiting
   4.342      {        
   4.343 @@ -1146,7 +1175,7 @@
   4.344  
   4.345     ptr = PR_PI__malloc( langReq->sizeToMalloc );
   4.346     requestingSlv->dataRetFromReq = ptr;
   4.347 -   resume_slaveVP( requestingSlv, langEnv );
   4.348 +   PR_PI__make_slave_ready( requestingSlv, langEnv );
   4.349   }
   4.350  
   4.351  /*
   4.352 @@ -1156,7 +1185,7 @@
   4.353   {
   4.354           DEBUG__printf1(dbgRqstHdlr,"Free request from processor %d",requestingSlv->slaveNum)
   4.355     PR_PI__free( langReq->ptrToFree );
   4.356 -   resume_slaveVP( requestingSlv, langEnv );
   4.357 +   PR_PI__make_slave_ready( requestingSlv, langEnv );
   4.358   }
   4.359  
   4.360  
   4.361 @@ -1173,7 +1202,7 @@
   4.362     if( singleton->hasFinished )
   4.363      {    //the code that sets the flag to true first sets the end instr addr
   4.364        reqstingSlv->dataRetFromReq = singleton->endInstrAddr;
   4.365 -      resume_slaveVP( reqstingSlv, langEnv );
   4.366 +      PR_PI__make_slave_ready( reqstingSlv, langEnv );
   4.367        return;
   4.368      }
   4.369     else if( singleton->hasBeenStarted )
   4.370 @@ -1185,7 +1214,7 @@
   4.371      {    //hasn't been started, so this is the first attempt at the singleton
   4.372        singleton->hasBeenStarted = TRUE;
   4.373        reqstingSlv->dataRetFromReq = 0x0;
   4.374 -      resume_slaveVP( reqstingSlv, langEnv );
   4.375 +      PR_PI__make_slave_ready( reqstingSlv, langEnv );
   4.376        return;
   4.377      }
   4.378   }
   4.379 @@ -1241,10 +1270,10 @@
   4.380      {    //they will resume inside start singleton, then jmp to end singleton
   4.381        resumingSlv = readPrivQ( waitQ );
   4.382        resumingSlv->dataRetFromReq = singleton->endInstrAddr;
   4.383 -      resume_slaveVP( resumingSlv, langEnv );
   4.384 +      PR_PI__make_slave_ready( resumingSlv, langEnv );
   4.385      }
   4.386  
   4.387 -   resume_slaveVP( requestingSlv, langEnv );
   4.388 +   PR_PI__make_slave_ready( requestingSlv, langEnv );
   4.389  
   4.390  }
   4.391  void
   4.392 @@ -1279,7 +1308,7 @@
   4.393   {
   4.394           DEBUG__printf1(dbgRqstHdlr,"Atomic request from processor %d",requestingSlv->slaveNum)
   4.395     langReq->fnToExecInMaster( langReq->dataForFn );
   4.396 -   resume_slaveVP( requestingSlv, langEnv );
   4.397 +   PR_PI__make_slave_ready( requestingSlv, langEnv );
   4.398   }
   4.399  
   4.400  /*First, it looks at the VP's semantic data, to see the highest transactionID
   4.401 @@ -1325,7 +1354,7 @@
   4.402     if( transStruc->VPCurrentlyExecuting == NULL )
   4.403      {
   4.404        transStruc->VPCurrentlyExecuting = requestingSlv;
   4.405 -      resume_slaveVP( requestingSlv, langEnv );
   4.406 +      PR_PI__make_slave_ready( requestingSlv, langEnv );
   4.407      }
   4.408     else
   4.409      {    //note, might make future things cleaner if save request with VP and
   4.410 @@ -1381,7 +1410,15 @@
   4.411     transStruc->VPCurrentlyExecuting = waitingSlv;
   4.412  
   4.413     if( waitingSlv != NULL )
   4.414 -      resume_slaveVP( waitingSlv, langEnv );
   4.415 +      PR_PI__make_slave_ready( waitingSlv, langEnv );
   4.416  
   4.417 -   resume_slaveVP( requestingSlv, langEnv );
   4.418 +   PR_PI__make_slave_ready( requestingSlv, langEnv );
   4.419   }
   4.420 +
   4.421 +void
   4.422 +VSs__make_task_ready( void *taskStub, void *_langEnv )
   4.423 + {
   4.424 +   writePrivQ( taskStub, ((VSsLangEnv*)_langEnv)->taskReadyQ );
   4.425 + }
   4.426 +
   4.427 +
     5.1 --- a/VSs_Request_Handlers.h	Sat Jan 12 11:31:51 2013 -0800
     5.2 +++ b/VSs_Request_Handlers.h	Tue Feb 05 20:24:25 2013 -0800
     5.3 @@ -14,19 +14,25 @@
     5.4  /*This header defines everything specific to the VSs semantic plug-in
     5.5   */
     5.6  
     5.7 +SlaveVP *
     5.8 +handleCreateThd( void *_langReq, SlaveVP *requestingSlv, void *_langEnv );
     5.9 +void
    5.10 +handleDissipate( void *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv );
    5.11 +
    5.12  inline 
    5.13  void *
    5.14  handleSubmitTask( VSsLangReq *langReq, VSsLangEnv *langEnv);
    5.15  inline void
    5.16  handleEndTask( VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv );
    5.17 +
    5.18  inline void
    5.19 -handleSendTypeTo( VSsLangReq *langReq, VSsLangEnv *langEnv);
    5.20 +handleSendTypeTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv);
    5.21  inline void
    5.22 -handleSendFromTo( VSsLangReq *langReq, VSsLangEnv *langEnv);
    5.23 +handleSendFromTo( VSsLangReq *langReq, SlaveVP* dummySlv, VSsLangEnv *langEnv);
    5.24  inline void
    5.25 -handleReceiveTypeTo( VSsLangReq *langReq, VSsLangEnv *langEnv);
    5.26 +handleReceiveTypeTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv);
    5.27  inline void
    5.28 -handleReceiveFromTo( VSsLangReq *langReq, VSsLangEnv *langEnv);
    5.29 +handleReceiveFromTo( VSsLangReq *langReq, SlaveVP *dummySlv, VSsLangEnv *langEnv);
    5.30  inline void
    5.31  handleTaskwait(VSsLangReq *langReq, SlaveVP *requestingSlv, VSsLangEnv *langEnv);
    5.32  
     6.1 --- a/VSs_SS.c	Sat Jan 12 11:31:51 2013 -0800
     6.2 +++ b/VSs_SS.c	Tue Feb 05 20:24:25 2013 -0800
     6.3 @@ -38,13 +38,13 @@
     6.4        // will make the dissipate handler do the right thing when the seed
     6.5        // is dissipated.
     6.6     threadTaskStub = 
     6.7 -    PR_int__create_lang_meta_task_in_slave__ML( sizeof(VSsTaskStub), seedSlv, VSs_MAGIC_NUMBER );
     6.8 +    PR_int__create_lang_meta_task_in_slave( sizeof(VSsTaskStub), &VSs__lang_meta_task_freer, seedSlv, VSs_MAGIC_NUMBER );
     6.9  
    6.10     threadTaskStub->isEnded = FALSE;
    6.11     threadTaskStub->isWaitingForChildTasksToEnd = FALSE;
    6.12     
    6.13     parentTaskStub =
    6.14 -    PR_int__create_lang_meta_task__ML(sizeof(VSsTaskStub), seedSlv, VSs_MAGIC_NUMBER);
    6.15 +    PR_int__create_lang_meta_task(sizeof(VSsTaskStub), &VSs__lang_meta_task_freer, seedSlv, VSs_MAGIC_NUMBER);
    6.16     
    6.17     parentTaskStub->isEnded = TRUE;
    6.18     parentTaskStub->numLiveChildThreads = 1; //so dissipate works for seed
    6.19 @@ -52,6 +52,12 @@
    6.20        //Note: threadTaskStub and parentTaskStub freed when dissipate seedSlv 
    6.21     
    6.22        //register the langlet's handlers with PR
    6.23 +   PR_SS__register_assigner(                &VSs__assign_work_to_slot, seedSlv, VSs_MAGIC_NUMBER );
    6.24 +   PR_SS__register_shutdown_handler(        &VSs__handle_shutdown, seedSlv, VSs_MAGIC_NUMBER );
    6.25 +   PR_SS__register_lang_data_creator(       &VSs__create_lang_data_in_slave, seedSlv, VSs_MAGIC_NUMBER );
    6.26 +   PR_SS__register_lang_meta_task_creator(  &VSs__create_empty_lang_meta_task_in_slave, seedSlv, VSs_MAGIC_NUMBER );
    6.27 +   PR_SS__register_make_slave_ready_fn(     &VSs__resume_slave );
    6.28 +   PR_SS__register_make_task_ready_fn(      &VSs__make_task_ready );
    6.29  /*
    6.30     PR_SS__register_create_task_handler(     &createTaskHandler, seedVP, VSs_MAGIC_NUMBER );
    6.31     PR_SS__register_end_task_handler(        &endTaskHandler, seedVP, VSs_MAGIC_NUMBER );
    6.32 @@ -59,10 +65,8 @@
    6.33     PR_SS__register_dissipate_slave_handler( &endThreadHandler, seedVP, VSs_MAGIC_NUMBER );
    6.34     RequestHandler createInitialLangDataFn;
    6.35     RequestHandler resetLangDataFn;
    6.36 -*/
    6.37     PR_SS__register_request_handler(         &VSs__Request_Handler, seedSlv, VSs_MAGIC_NUMBER );
    6.38 -   PR_SS__register_assigner(                &VSs__assign_work_to_slot, seedSlv, VSs_MAGIC_NUMBER );
    6.39 -   PR_SS__register_shutdown_handler(        &VSs__shutdown, seedSlv, VSs_MAGIC_NUMBER );
    6.40 + */
    6.41  
    6.42     #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
    6.43     _PRTopEnv->counterHandler = &VSs__counter_handler;
    6.44 @@ -106,12 +110,12 @@
    6.45   }
    6.46  
    6.47  
    6.48 -/*This shuts down the langket
    6.49 +/*This shuts down the langlet
    6.50   * Frees any memory allocated by VSs__init() and deletes any slaves or tasks
    6.51   * still in ready Qs.
    6.52   */
    6.53  void
    6.54 -VSs__shutdown( void *_langEnv )
    6.55 +VSs__handle_shutdown( void *_langEnv )
    6.56   { VSsLangEnv *langEnv = (VSsLangEnv *)_langEnv;
    6.57     
    6.58     #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
    6.59 @@ -235,15 +239,17 @@
    6.60     SlaveVP *slave;
    6.61     VSsTaskStub *task;
    6.62     
    6.63 +   //dissipate any slaves still in the readyQ
    6.64     queue = langEnv->slavesReadyToResumeQ;
    6.65     slave = readPrivQ( queue );
    6.66     while( slave != NULL )
    6.67 -    { handleShutdownDissipate(slave);
    6.68 -      PR_int__recycle_slave__ML( slave ); //recycler is for all of PR
    6.69 +    { handleShutdownDissipate( slave );
    6.70 +      PR_int__recycle_slave( slave ); //recycler is for all of PR
    6.71        slave = readPrivQ( queue );
    6.72      }
    6.73     freePrivQ( queue );
    6.74     
    6.75 +   //end any tasks still in the readyQ
    6.76     queue = langEnv->taskReadyQ;
    6.77     task = readPrivQ( queue );
    6.78     while( task != NULL )