diff --git a/executablecode/src/request.c b/executablecode/src/request.c index 5d5cd0e37f146cd848a950592b8fdf8066047284..d91bfcf7a348171187b7e0ed5f9b8e678879139b 100644 --- a/executablecode/src/request.c +++ b/executablecode/src/request.c @@ -29,6 +29,9 @@ void makeNewRequest(request *req, int ID, int type, int hasDelay, long minDelay, req->next = NULL; req->listOfRequests = NULL; req->nextRequestInList = NULL; + + req->linkedTo = NULL; + req->type = type; req->ID = ID; req->hasDelay = hasDelay; diff --git a/executablecode/src/tracemanager.c b/executablecode/src/tracemanager.c index b8d38628187bd203254452a56654c938d3613846..7e2e9c0f014653b38e7ae2562c81eba2b734dfe5 100644 --- a/executablecode/src/tracemanager.c +++ b/executablecode/src/tracemanager.c @@ -13,8 +13,7 @@ #define TRACE_FILE_NAME "Trace.txt" -//pthread_mutex_t traceMutex; -//pthread_cond_t wakeupTraceManager; +pthread_mutex_t __traceMutex; int trace = TRACE_OFF; int id = 0; @@ -24,7 +23,6 @@ FILE *file; struct timespec begints; - void addInfo(char *dest, char *info) { char s1[10]; long tmp; @@ -57,6 +55,7 @@ void addInfo(char *dest, char *info) { void writeInTrace(char *info) { + mutex_lock(&__traceMutex); char s[CHAR_ALLOC_SIZE]; addInfo(s, info); //printf("Write in file\n"); @@ -67,6 +66,7 @@ void writeInTrace(char *info) { fprintf(file, s); fflush(file); } + mutex_unlock(&__traceMutex); } @@ -80,6 +80,9 @@ void activeTracingInFile(char *fileName) { name = fileName; } file = fopen(name,"w"); + + /* Initializing mutex */ + if (pthread_mutex_init(&__traceMutex, NULL) < 0) { exit(-1);} } void unactiveTracing() { @@ -148,6 +151,8 @@ void traceVariableModification(char *block, char *var, int value, int type) { void traceRequest(char *myname, request *req) { char s[1024]; + int i; + debugMsg("Trace request"); @@ -161,10 +166,16 @@ void traceRequest(char *myname, request *req) { switch(req->type) { case SEND_SYNC_REQUEST: debug2Msg("Sync channel", req->syncChannel->outname); - if ( req->linkedTo == NULL) { - printf("NULL related\n"); - } - sprintf(s, "block=%s type=send_synchro channel=%s blockdestination=%s\n", myname, req->syncChannel->outname, req->linkedTo->listOfRequests->owner); + //sprintf(s, "block=%s type=send_synchro channel=%s blockdestination=%s\n", myname, req->syncChannel->outname, req->linkedTo->listOfRequests->owner); + sprintf(s, "block=%s type=send_synchro channel=%s blockdestination=%s params=", myname, req->syncChannel->outname, req->linkedTo->listOfRequests->owner); + for(i=0; i<req->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, *(req->params[i])); + } + sprintf(s, "%s\n", s); + break; case RECEIVE_SYNC_REQUEST: sprintf(s, "block=%s type=receive_synchro channel=%s\n", myname, req->syncChannel->inname); diff --git a/executablecode/src/tracemanager.h b/executablecode/src/tracemanager.h index e85417a0cba27dd1a163c59ece6286e6c39ef58a..45f4ecb341078f7d3214b71775ce79645dc47613 100644 --- a/executablecode/src/tracemanager.h +++ b/executablecode/src/tracemanager.h @@ -5,6 +5,7 @@ #define CHAR_ALLOC_SIZE 1024 + void activeTracingInFile(); void unactiveTracing(); void traceRequest(char *myname, request *req); diff --git a/src/avatartranslator/directsimulation/AvatarSimulationBlock.java b/src/avatartranslator/directsimulation/AvatarSimulationBlock.java index cdf186961cb221f939268209a3e90c53d91b11a0..e0952117c79725142afe4684b6c061f8d7c310d1 100644 --- a/src/avatartranslator/directsimulation/AvatarSimulationBlock.java +++ b/src/avatartranslator/directsimulation/AvatarSimulationBlock.java @@ -175,6 +175,7 @@ public class AvatarSimulationBlock { aspt = new AvatarSimulationPendingTransaction(); aspt.asb = this; aspt.elementToExecute = lastTransaction.executedElement.getNext(i); + aspt.previouslyExecutedElement = lastTransaction.executedElement; if ((aspt.elementToExecute instanceof AvatarTransition) && (lastTransaction.executedElement instanceof AvatarState)) { AvatarTransition trans = (AvatarTransition)(aspt.elementToExecute); if (trans.getNbOfAction() == 0){ diff --git a/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java b/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java index be2297af7a1cbdd9ca0d7f9980d0edb804af081e..c2ed35a166135ebb29f08061062d1f50382d041c 100644 --- a/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java +++ b/src/avatartranslator/directsimulation/AvatarSimulationPendingTransaction.java @@ -57,6 +57,7 @@ import myutil.*; public class AvatarSimulationPendingTransaction { public AvatarSimulationBlock asb; + public AvatarStateMachineElement previouslyExecutedElement; public AvatarStateMachineElement elementToExecute; public AvatarStateMachineElement involvedElement; //(transition) public AvatarSimulationPendingTransaction linkedTransaction; @@ -108,6 +109,7 @@ public class AvatarSimulationPendingTransaction { AvatarSimulationPendingTransaction aspt = new AvatarSimulationPendingTransaction(); aspt.asb = this.asb; aspt.elementToExecute = this.elementToExecute; + aspt.previouslyExecutedElement = this.previouslyExecutedElement; aspt.involvedElement = this.involvedElement; aspt.linkedTransaction = this.linkedTransaction; aspt.linkedAsynchronousMessage = this.linkedAsynchronousMessage; diff --git a/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java b/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java index c5717f4af52cad264d40d8604e631ae647118fe8..cf45311fbea79a5ab48fa87bfa0a4c09685c462f 100644 --- a/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java +++ b/src/avatartranslator/directsimulation/AvatarSpecificationSimulation.java @@ -591,9 +591,11 @@ public class AvatarSpecificationSimulation { if (aspt.elementToExecute instanceof AvatarTransition) { AvatarTransition atr = (AvatarTransition)(aspt.elementToExecute); if (!(atr.hasDelay()) && !(atr.hasCompute()) && !(atr.hasActions())){ - if (nbOfTransactions(aspt.asb, _pendingTransactions) < 2) { - return true; - } + if ((aspt.previouslyExecutedElement != null) && (aspt.previouslyExecutedElement.nbOfNexts() < 2)) { + if (nbOfTransactions(aspt.asb, _pendingTransactions) < 2) { + return true; + } + } } // State entering? } else if (((aspt.elementToExecute instanceof AvatarState) || (aspt.elementToExecute instanceof AvatarStopState))) { @@ -762,6 +764,7 @@ public class AvatarSpecificationSimulation { AvatarTransition atr = (AvatarTransition)(tr.elementToExecute); if (!(atr.hasDelay()) && !(atr.hasCompute()) && !(atr.hasActions())){ if (nbOfTransactions(tr.asb, _pendingTransactions) < 2) { + TraceManager.addDev("Setting to silent"); tr.isSilent = true; return tr; } @@ -769,6 +772,7 @@ public class AvatarSpecificationSimulation { // State entering? } else if (((tr.elementToExecute instanceof AvatarState) || (tr.elementToExecute instanceof AvatarStopState)) && (executeStateEntering)) { if (nbOfTransactions(tr.asb, _pendingTransactions) < 2) { + TraceManager.addDev("Setting to silent"); tr.isSilent = true; return tr; } diff --git a/src/ui/interactivesimulation/GenericTransaction.java b/src/ui/interactivesimulation/GenericTransaction.java index 17dca056266d8cb94642e80f77f73423cc52a4fc..d121a0f6771ef4582af7c0982464e743e0c96877 100755 --- a/src/ui/interactivesimulation/GenericTransaction.java +++ b/src/ui/interactivesimulation/GenericTransaction.java @@ -65,6 +65,7 @@ public class GenericTransaction { public String entityName; public String otherEntityName; /* name of destination in synchro, etc. */ public String name; /* Used for channel names */ + public String params; /* values separated with commas */ public String action; public long startingTime; public long finishTime; diff --git a/src/ui/interactivesimulation/JSimulationSDPanel.java b/src/ui/interactivesimulation/JSimulationSDPanel.java index 4c797e152580632c787fa94ba0cef8b79359c0d5..f26d5e73a8641285789726a538dd622c8cb6f46d 100644 --- a/src/ui/interactivesimulation/JSimulationSDPanel.java +++ b/src/ui/interactivesimulation/JSimulationSDPanel.java @@ -360,7 +360,7 @@ public class JSimulationSDPanel extends JPanel implements MouseMotionListener, R g.drawLine(currentX, currentY, currentX, currentY+verticalLink); currentY += verticalLink; - messageName = _gt.name + "(" + ")"; + messageName = _gt.name + "(" + _gt.params + ")"; Color c = g.getColor(); @@ -775,6 +775,7 @@ public class JSimulationSDPanel extends JPanel implements MouseMotionListener, R points.clear(); Thread t = new Thread(this); t.start(); + repaint(); } } @@ -934,6 +935,11 @@ public class JSimulationSDPanel extends JPanel implements MouseMotionListener, R if (tmp != null) { gt.name = tmp; } + + tmp = extract(trans, "params"); + if (tmp != null) { + gt.params = tmp; + } transactions.add(gt); TraceManager.addDev("One transactions added");