1 19 20 package org.netbeans.modules.editor.options; 21 22 import java.util.Collection ; 23 import javax.swing.text.EditorKit ; 24 import org.netbeans.api.editor.mimelookup.MimeLookup; 25 import org.netbeans.api.editor.mimelookup.MimePath; 26 import org.netbeans.junit.NbTestCase; 27 import org.openide.filesystems.FileObject; 28 import org.openide.filesystems.Repository; 29 import org.openide.modules.ModuleInfo; 30 import org.openide.util.Lookup; 31 import org.openide.util.RequestProcessor; 32 import org.openide.util.Task; 33 34 38 public class BaseOptionsDeadlock92449Test extends NbTestCase { 39 40 41 public BaseOptionsDeadlock92449Test(String name) { 42 super(name); 43 } 44 45 public void testDeadlock92449() { 46 Collection modules = Lookup.getDefault().lookupAll(ModuleInfo.class); 48 49 FileObject f = Repository.getDefault().getDefaultFileSystem().findResource("Editors/text/x-java/Settings.settings"); 51 assertNotNull("Can't find Settings.settings for text/x-java", f); 52 53 final String mimeType = "text/x-java"; 54 final MimePath mimePath = MimePath.parse(mimeType); 55 56 final BaseOptions [] baseOptions = new BaseOptions[1]; 57 final Runnable runnableA = new Runnable () { 58 public void run() { 59 baseOptions[0] = (BaseOptions) MimeLookup.getLookup(mimePath).lookup(BaseOptions.class); 60 baseOptions[0].getAbbrevMap(); 61 } 62 }; 63 64 final EditorKit [] editorKit = new EditorKit [1]; 65 final Runnable runnableB = new Runnable () { 66 public void run() { 67 editorKit[0] = (EditorKit ) MimeLookup.getLookup(mimePath).lookup(EditorKit .class); 68 editorKit[0].getActions(); 69 } 70 }; 71 72 final Boolean [] stop = new Boolean [] { Boolean.FALSE }; 73 final Runnable loadGenerator = new Runnable () { 74 public void run() { 75 for( ; ; ) { 76 if (stop[0].booleanValue()) { 77 break; 78 } 79 80 int [] array = new int [1024000]; 81 for(int j = 0; j < array.length; j++) { 82 array[j] = j; 83 } 84 } 85 } 86 }; 87 88 Task loadGeneratorTask = RequestProcessor.getDefault().post(loadGenerator); 89 Task taskA = RequestProcessor.getDefault().post(runnableA); 90 Task taskB = RequestProcessor.getDefault().post(runnableB); 91 92 for(int i = 0; i < 50; i++) { 93 if (taskA.isFinished() && taskB.isFinished()) { 94 break; 95 } 96 97 try { 98 Thread.sleep(1000); 99 } catch (InterruptedException e) { 100 } 102 } 103 104 stop[0] = Boolean.TRUE; 105 106 assertTrue("TaskA - lookup BaseOptions, has not finished. Possible deadlock", taskA.isFinished()); 107 assertTrue("TaskB - lookup EditorKit, has not finished. Possible deadlock", taskB.isFinished()); 108 109 assertNotNull("Can't find BaseOptions for " + mimeType, baseOptions[0]); 110 assertEquals("Wrong mime type on BaseOptions", mimeType, baseOptions[0].getContentType()); 111 112 assertNotNull("Can't find EditorKit for " + mimeType, editorKit[0]); 113 assertEquals("Wrong mime type on EditorKit", mimeType, editorKit[0].getContentType()); 114 } 115 } 116 | Popular Tags |