Deadlock tests: removing ulinks, adding one picture, rewording a bit, adding new examples
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/LabelProviderSyncOnTreeLock.java Sat Jun 14 09:54:29 2008 +0200
1.3 @@ -0,0 +1,26 @@
1.4 +package org.apidesign.deadlock;
1.5 +
1.6 +import java.util.HashSet;
1.7 +import java.util.logging.Level;
1.8 +import java.util.logging.Logger;
1.9 +import javax.swing.JLabel;
1.10 +import javax.swing.JPanel;
1.11 +
1.12 +public class LabelProviderSyncOnTreeLock extends JPanel {
1.13 + private static Logger LOG = Logger.getLogger(LabelProviderSyncOnTreeLock.class.getName());
1.14 +
1.15 + // BEGIN: deadlock.provider.treelock
1.16 + private HashSet<JLabel> allCreated = new HashSet<JLabel>();
1.17 +
1.18 + public JLabel createLabel () {
1.19 + synchronized (getTreeLock()) {
1.20 + LOG.log(Level.INFO, "Will create JLabel");
1.21 + JLabel l = new JLabel ();
1.22 + LOG.log(Level.INFO, "Label created {0}", l);
1.23 + allCreated.add (l);
1.24 + return l;
1.25 + }
1.26 + }
1.27 + // END: deadlock.provider.treelock
1.28 +
1.29 +}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2000-06-01.txt Sat Jun 14 09:54:29 2008 +0200
2.3 @@ -0,0 +1,10 @@
2.4 +public final Node getNodeDelegate () {
2.5 + if (nodeDelegate == null) {
2.6 + synchronized (this) {
2.7 + if (nodeDelegate == null) {
2.8 + nodeDelegate = createNodeDelegate ();
2.9 + }
2.10 + }
2.11 + }
2.12 + return nodeDelegate;
2.13 +}
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2000-06-26.txt Sat Jun 14 09:54:29 2008 +0200
3.3 @@ -0,0 +1,12 @@
3.4 +public final Node getNodeDelegate () {
3.5 + if (nodeDelegate == null) {
3.6 + Children.MUTEX.writeAccess (new Runnable () {
3.7 + public void run () {
3.8 + if (nodeDelegate == null) {
3.9 + nodeDelegate = createNodeDelegate ();
3.10 + }
3.11 + }
3.12 + });
3.13 + }
3.14 + return nodeDelegate;
3.15 +}
3.16 \ No newline at end of file
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2004-01-28.txt Sat Jun 14 09:54:29 2008 +0200
4.3 @@ -0,0 +1,18 @@
4.4 +public final Node getNodeDelegate () {
4.5 + if (nodeDelegate == null) {
4.6 + Children.MUTEX.readAccess (new Runnable() {
4.7 + public void run() {
4.8 + synchronized(nodeCreationLock) {
4.9 + if (nodeDelegate == null) {
4.10 + nodeDelegate = createNodeDelegate();
4.11 + }
4.12 + }
4.13 + }
4.14 + });
4.15 +
4.16 + if (nodeDelegate == null) {
4.17 + throw new IllegalStateException("DataObject " + this + " ...");
4.18 + }
4.19 + }
4.20 + return nodeDelegate;
4.21 +}
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/samples/deadlock/src/org/apidesign/deadlock/amoebashake/2004-01-29.txt Sat Jun 14 09:54:29 2008 +0200
5.3 @@ -0,0 +1,11 @@
5.4 +public final Node getNodeDelegate () {
5.5 + synchronized(nodeCreationLock) {
5.6 + if (nodeDelegate == null) {
5.7 + nodeDelegate = createNodeDelegate();
5.8 + }
5.9 + }
5.10 + if (nodeDelegate == null) {
5.11 + throw new IllegalStateException("DataObject " + this + " has null
5.12 + }
5.13 + return nodeDelegate;
5.14 +}
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/samples/deadlock/test/org/apidesign/deadlock/DeadlockSyncOnTest.java Sat Jun 14 09:54:29 2008 +0200
6.3 @@ -0,0 +1,66 @@
6.4 +package org.apidesign.deadlock;
6.5 +
6.6 +import java.awt.Dimension;
6.7 +import java.util.logging.Level;
6.8 +import java.util.logging.Logger;
6.9 +import javax.swing.JFrame;
6.10 +import javax.swing.JLabel;
6.11 +import javax.swing.JPanel;
6.12 +import javax.swing.SwingUtilities;
6.13 +import org.junit.Test;
6.14 +import org.netbeans.junit.Log;
6.15 +import org.netbeans.junit.NbTestCase;
6.16 +import static org.junit.Assert.*;
6.17 +
6.18 +public class DeadlockSyncOnTest extends NbTestCase {
6.19 + static final Logger LOG = Logger.getLogger(DeadlockSyncOnTest.class.getName());
6.20 +
6.21 + public DeadlockSyncOnTest(String n) {
6.22 + super(n);
6.23 + }
6.24 +
6.25 + @Override
6.26 + protected int timeOut() {
6.27 + return 10000;
6.28 + }
6.29 +
6.30 +
6.31 + public static class StrangePanel extends LabelProviderSyncOnTreeLock {
6.32 + @Override
6.33 + public Dimension getPreferredSize () {
6.34 + try {
6.35 + Thread.sleep(1000);
6.36 + JLabel sampleLabel = createLabel();
6.37 + return sampleLabel.getPreferredSize();
6.38 + } catch (InterruptedException ex) {
6.39 + Logger.getLogger(DeadlockSyncOnTest.class.getName()).log(Level.SEVERE, null, ex);
6.40 + return super.getPreferredSize();
6.41 + }
6.42 + }
6.43 + }
6.44 +
6.45 +
6.46 +
6.47 +
6.48 + public void testCreateLabel() throws Exception {
6.49 + final LabelProviderSyncOnTreeLock instance = new StrangePanel();
6.50 +
6.51 + class R implements Runnable {
6.52 + public void run() {
6.53 + JFrame f = new JFrame();
6.54 + f.add(instance);
6.55 + f.setVisible(true);
6.56 + f.pack();
6.57 + }
6.58 + }
6.59 +
6.60 + R showFrame = new R();
6.61 + SwingUtilities.invokeLater(showFrame);
6.62 +
6.63 + Thread.sleep(500);
6.64 + JLabel result = instance.createLabel();
6.65 + assertNotNull("Creates the result", result);
6.66 + }
6.67 +
6.68 +}
6.69 +
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/samples/deadlock/test/org/apidesign/deadlock/DeadlockTest.java Sat Jun 14 09:54:29 2008 +0200
7.3 @@ -0,0 +1,68 @@
7.4 +package org.apidesign.deadlock;
7.5 +
7.6 +import java.awt.Dimension;
7.7 +import java.util.logging.Level;
7.8 +import java.util.logging.Logger;
7.9 +import javax.swing.JFrame;
7.10 +import javax.swing.JLabel;
7.11 +import javax.swing.JPanel;
7.12 +import javax.swing.SwingUtilities;
7.13 +import org.junit.Test;
7.14 +import org.netbeans.junit.Log;
7.15 +import org.netbeans.junit.NbTestCase;
7.16 +import static org.junit.Assert.*;
7.17 +
7.18 +// BEGIN: deadlock.test
7.19 +public class DeadlockTest extends NbTestCase {
7.20 + static final Logger LOG = Logger.getLogger(DeadlockTest.class.getName());
7.21 +
7.22 + public DeadlockTest(String n) {
7.23 + super(n);
7.24 + }
7.25 +
7.26 + @Override
7.27 + protected int timeOut() {
7.28 + return 10000;
7.29 + }
7.30 +
7.31 +
7.32 + public static class StrangePanel extends LabelProvider {
7.33 + @Override
7.34 + public Dimension getPreferredSize () {
7.35 + try {
7.36 + Thread.sleep(1000);
7.37 + JLabel sampleLabel = createLabel();
7.38 + return sampleLabel.getPreferredSize();
7.39 + } catch (InterruptedException ex) {
7.40 + Logger.getLogger(DeadlockTest.class.getName()).log(Level.SEVERE, null, ex);
7.41 + return super.getPreferredSize();
7.42 + }
7.43 + }
7.44 + }
7.45 +
7.46 +
7.47 +
7.48 +
7.49 + public void testCreateLabel() throws Exception {
7.50 + final LabelProvider instance = new StrangePanel();
7.51 +
7.52 + class R implements Runnable {
7.53 + public void run() {
7.54 + JFrame f = new JFrame();
7.55 + f.add(instance);
7.56 + f.setVisible(true);
7.57 + f.pack();
7.58 + }
7.59 + }
7.60 +
7.61 + R showFrame = new R();
7.62 + SwingUtilities.invokeLater(showFrame);
7.63 +
7.64 + Thread.sleep(500);
7.65 + JLabel result = instance.createLabel();
7.66 + assertNotNull("Creates the result", result);
7.67 + }
7.68 +
7.69 +}
7.70 +// END: deadlock.test
7.71 +
8.1 --- a/samples/deadlock/test/org/apidesign/deadlock/LabelProviderTest.java Sat Jun 14 09:54:28 2008 +0200
8.2 +++ b/samples/deadlock/test/org/apidesign/deadlock/LabelProviderTest.java Sat Jun 14 09:54:29 2008 +0200
8.3 @@ -11,6 +11,7 @@
8.4 import org.netbeans.junit.NbTestCase;
8.5 import static org.junit.Assert.*;
8.6
8.7 +// BEGIN: deadlock.test.controlflow
8.8 public class LabelProviderTest extends NbTestCase {
8.9 static final Logger LOG = Logger.getLogger(LabelProviderTest.class.getName());
8.10
8.11 @@ -68,4 +69,6 @@
8.12 assertNotNull("Creates the result", result);
8.13 }
8.14
8.15 -}
8.16 \ No newline at end of file
8.17 +}
8.18 +// END: deadlock.test.controlflow
8.19 +