diff options
| author | Paul Buetow <paul@buetow.org> | 2008-06-12 22:03:41 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-06-12 22:03:41 +0000 |
| commit | ae1e594e43bb18ca293124564c3a63e486bcc9f5 (patch) | |
| tree | 11c4023036c592a234929f9c85af8b76e514b560 /sources | |
| parent | 64a08ca2f7f574e63c39b10f8daaf69ee0dba391 (diff) | |
fixed deadlock (probably) bug
Diffstat (limited to 'sources')
| -rw-r--r-- | sources/core/VSTask.java | 4 | ||||
| -rw-r--r-- | sources/prefs/VSPrefsRestriction.java | 16 | ||||
| -rw-r--r-- | sources/simulator/VSSimulatorCanvas.java | 47 | ||||
| -rw-r--r-- | sources/simulator/VSSimulatorFrame.java | 9 |
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 + " " + |
