|
From: <jom...@us...> - 2015-11-13 14:41:54
|
Revision: 1854
http://sourceforge.net/p/jason/svn/1854
Author: jomifred
Date: 2015-11-13 14:41:52 +0000 (Fri, 13 Nov 2015)
Log Message:
-----------
fix bug related to pool of threads and agent creation
Modified Paths:
--------------
trunk/src/jason/infra/centralised/CentralisedAgArch.java
trunk/src/jason/infra/centralised/RunCentralisedMAS.java
Modified: trunk/src/jason/infra/centralised/CentralisedAgArch.java
===================================================================
--- trunk/src/jason/infra/centralised/CentralisedAgArch.java 2015-11-11 20:16:54 UTC (rev 1853)
+++ trunk/src/jason/infra/centralised/CentralisedAgArch.java 2015-11-13 14:41:52 UTC (rev 1854)
@@ -126,9 +126,10 @@
public void stopAg() {
running = false;
- if (myThread != null)
- myThread.interrupt();
- synchronized (syncStopRun) {
+ wake(); // so that it leaves the run loop
+ //if (myThread != null) // not necessary, the ag loop should finish since running == false
+ // myThread.interrupt();
+ synchronized (syncStopRun) { // wait the run loop to finish
masRunner.delAg(agName);
}
getTS().getAg().stopAg();
Modified: trunk/src/jason/infra/centralised/RunCentralisedMAS.java
===================================================================
--- trunk/src/jason/infra/centralised/RunCentralisedMAS.java 2015-11-11 20:16:54 UTC (rev 1853)
+++ trunk/src/jason/infra/centralised/RunCentralisedMAS.java 2015-11-13 14:41:52 UTC (rev 1854)
@@ -27,6 +27,7 @@
import jason.asSemantics.Agent;
import jason.asSyntax.directives.DirectiveProcessor;
import jason.asSyntax.directives.Include;
+import jason.bb.DefaultBeliefBase;
import jason.control.ExecutionControlGUI;
import jason.infra.repl.ReplAgGUI;
import jason.jeditplugin.Config;
@@ -458,15 +459,15 @@
}
agArch.setAgName(numberedAg);
agArch.setEnvInfraTier(env);
- if (isPool && cAg > 0) {
+ if (isPool && cAg > 0 && ap.getAgArchClasses().isEmpty() && ap.getBBClass().equals(DefaultBeliefBase.class.getName())) {
// creation by cloning previous agent (which is faster -- no parsing, for instance)
+ // used if not customisations are defined
agArch.createArchs(ap.getAgArchClasses(), pag, this);
} else {
// normal creation
agArch.createArchs(ap.getAgArchClasses(), ap.agClass.getClassName(), ap.getBBClass(), ap.asSource.toString(), ap.getAsSetts(debug, project.getControlClass() != null), this);
}
addAg(agArch);
-
pag = agArch.getTS().getAg();
}
} catch (Exception e) {
@@ -715,8 +716,14 @@
}
}
- public void finish() {
-
+ private Boolean runningFinish = false;
+ public void finish() {
+ // avoid two threads running finish!
+ synchronized (runningFinish) {
+ if (runningFinish)
+ return;
+ runningFinish = true;
+ }
try {
// creates a thread that guarantees system.exit(0) in 5 seconds
// (the stop of agents can block)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|