summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-06-12 22:03:41 +0000
committerPaul Buetow <paul@buetow.org>2008-06-12 22:03:41 +0000
commitae1e594e43bb18ca293124564c3a63e486bcc9f5 (patch)
tree11c4023036c592a234929f9c85af8b76e514b560 /sources
parent64a08ca2f7f574e63c39b10f8daaf69ee0dba391 (diff)
fixed deadlock (probably) bug
Diffstat (limited to 'sources')
-rw-r--r--sources/core/VSTask.java4
-rw-r--r--sources/prefs/VSPrefsRestriction.java16
-rw-r--r--sources/simulator/VSSimulatorCanvas.java47
-rw-r--r--sources/simulator/VSSimulatorFrame.java9
4 files changed, 54 insertions, 22 deletions
diff --git a/sources/core/VSTask.java b/sources/core/VSTask.java
index 13f9c01..1a5718c 100644
--- a/sources/core/VSTask.java
+++ b/sources/core/VSTask.java
@@ -370,8 +370,8 @@ public class VSTask implements Comparable, VSSerializable {
String shortname = event.getShortname();
String shortname2 = event2.getShortname();
- /* One of those may be null if an VSAbstractEvent object has not
- been initialized yet */
+ /* One of those may be null if an VSAbstractEvent object has not
+ been initialized yet */
if (shortname == null || shortname2 == null)
return 0;
diff --git a/sources/prefs/VSPrefsRestriction.java b/sources/prefs/VSPrefsRestriction.java
index 32ab213..0709713 100644
--- a/sources/prefs/VSPrefsRestriction.java
+++ b/sources/prefs/VSPrefsRestriction.java
@@ -77,8 +77,8 @@ abstract public class VSPrefsRestriction implements Serializable {
*/
public void writeObject(ObjectOutputStream out)
throws IOException {
- out.writeObject(new Integer(minValue));
- out.writeObject(new Integer(maxValue));
+ out.writeObject(new Integer(minValue));
+ out.writeObject(new Integer(maxValue));
}
/* (non-Javadoc)
@@ -86,8 +86,8 @@ abstract public class VSPrefsRestriction implements Serializable {
*/
public void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException {
- minValue = ((Integer) in.readObject()).intValue();
- maxValue = ((Integer) in.readObject()).intValue();
+ minValue = ((Integer) in.readObject()).intValue();
+ maxValue = ((Integer) in.readObject()).intValue();
}
}
@@ -126,17 +126,17 @@ abstract public class VSPrefsRestriction implements Serializable {
*/
public void writeObject(ObjectOutputStream out)
throws IOException {
- out.writeObject(possibleSelections);
+ out.writeObject(possibleSelections);
}
/* (non-Javadoc)
* @see prefs.VSPrefsRestriction#readObject(java.io.ObjectInputStream)
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("unchecked")
public void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException {
- possibleSelections = (Vector<String>) in.readObject();
- }
+ possibleSelections = (Vector<String>) in.readObject();
+ }
}
/**
diff --git a/sources/simulator/VSSimulatorCanvas.java b/sources/simulator/VSSimulatorCanvas.java
index 039b624..92247c9 100644
--- a/sources/simulator/VSSimulatorCanvas.java
+++ b/sources/simulator/VSSimulatorCanvas.java
@@ -1015,6 +1015,8 @@ public class VSSimulatorCanvas extends Canvas
private VSProcess getProcessAtYPos(int yPos) {
final int reachDistance = (int) (yDistance/3);
int y = YOFFSET + YOUTER_SPACEING + YSEPLINE_SPACEING;
+ //int bla = 0;
+ //System.out.println("FOO " + bla++);
int yOffset = numProcesses > 1
? (int) ((paintSize-2*
@@ -1025,12 +1027,19 @@ public class VSSimulatorCanvas extends Canvas
for (int i = 0; i < numProcesses; ++i) {
if (yPos < y + reachDistance && yPos > y - reachDistance -
- LINE_WIDTH)
+ LINE_WIDTH) {
+ VSProcess process = null;
+ //System.out.println("FOO " + bla++);
synchronized (processes) {
- return processes.get(i);
+ //System.out.println("FOO " + bla++);
+ process = processes.get(i);
}
+ //System.out.println("FOO " + bla++);
+ return process;
+ }
y += yOffset;
}
+ //System.out.println("BAZ " + bla++);
return null;
}
@@ -1408,7 +1417,10 @@ public class VSSimulatorCanvas extends Canvas
public void editProcess(int processNum) {
synchronized (processes) {
VSProcess process = processes.get(processNum);
- editProcess(process);
+ /* May be null if another thread changed the processes arraylist
+ before this process actually called editProcess */
+ if (process != null)
+ editProcess(process);
}
}
@@ -1544,12 +1556,22 @@ public class VSSimulatorCanvas extends Canvas
* @return The process which has been added
*/
private VSProcess addProcess() {
+ VSProcess newProcess = null;
+ //int foo = -1;
+ //System.out.println("ADD " + ++foo);
synchronized (processes) {
+ //System.out.println("ADD " + ++foo);
numProcesses = processes.size() + 1;
- VSProcess newProcess = createProcess(processes.size());
- addProcess(newProcess);
- return newProcess;
+ //System.out.println("ADD " + ++foo);
+ newProcess = createProcess(processes.size());
+ //System.out.println("ADD " + ++foo);
+ //System.out.println("ADD " + ++foo);
}
+
+ //System.out.println("ADD " + ++foo);
+ addProcess(newProcess);
+ //System.out.println("ADD " + ++foo);
+ return newProcess;
}
/**
@@ -1558,16 +1580,23 @@ public class VSSimulatorCanvas extends Canvas
* @newProcess The process to add
*/
private void addProcess(VSProcess newProcess) {
+ //int foo = -1;
+ //System.out.println("ADD_ " + ++foo);
synchronized (processes) {
+ //System.out.println("ADD_ " + ++foo);
processes.add(newProcess);
for (VSProcess process : processes)
if (!process.equals(newProcess))
process.addedAProcess();
-
- recalcOnChange();
- simulator.addProcessAtIndex(processes.size()-1);
+ //System.out.println("ADD_ " + ++foo);
}
+
+ //System.out.println("ADD_ " + ++foo);
+ recalcOnChange();
+ //System.out.println("ADD_ " + ++foo);
+ simulator.addProcessAtIndex(processes.size()-1);
+ //System.out.println("ADD_ " + ++foo);
}
/**
diff --git a/sources/simulator/VSSimulatorFrame.java b/sources/simulator/VSSimulatorFrame.java
index caf06cb..fde7996 100644
--- a/sources/simulator/VSSimulatorFrame.java
+++ b/sources/simulator/VSSimulatorFrame.java
@@ -405,6 +405,7 @@ public class VSSimulatorFrame extends VSFrame {
JMenuItem globalPrefsItem = new JMenuItem(
prefs.getString("lang.prefs"));
+
globalPrefsItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
VSPrefs simulatorPrefs = currentSimulator.getPrefs();
@@ -415,18 +416,20 @@ public class VSSimulatorFrame extends VSFrame {
simulatorEditor);
}
});
+
menuEdit.add(globalPrefsItem);
menuEdit.addSeparator();
if (currentSimulator == null)
return;
- final String processString = prefs.getString("lang.process");
- final ArrayList<VSProcess> arr =
+ String processString = prefs.getString("lang.process");
+ ArrayList<VSProcess> arr =
currentSimulator.getSimulatorCanvas().getProcessesArray();
- final int numProcesses = arr.size();
+ int numProcesses = arr.size();
int processNum = 0;
+
for (VSProcess process : arr) {
int processID = process.getProcessID();
JMenuItem processItem = new JMenuItem(processString + " " +