AbstractDocument.remove should perform all operations within a write lock
and the order is also fixed up by this patch.

2006-02-09  Roman Kennke  <[EMAIL PROTECTED]>

        * javax/swing/text/AbstractDocument.java
        (remove): Perform all operations within a write lock and in the
        correct order.

/Roman
Index: javax/swing/text/AbstractDocument.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/AbstractDocument.java,v
retrieving revision 1.44
diff -u -r1.44 AbstractDocument.java
--- javax/swing/text/AbstractDocument.java	7 Feb 2006 16:42:39 -0000	1.44
+++ javax/swing/text/AbstractDocument.java	9 Feb 2006 16:56:43 -0000
@@ -681,18 +681,18 @@
       new DefaultDocumentEvent(offset, length,
 			       DocumentEvent.EventType.REMOVE);
     
-    removeUpdate(event);
-
-    boolean shouldFire = content.getString(offset, length).length() != 0;
-    
-    writeLock();
-    UndoableEdit temp = content.remove(offset, length);
-    writeUnlock();
-    
-    postRemoveUpdate(event);
-    
-    if (shouldFire)
-      fireRemoveUpdate(event);
+    try
+      {
+        writeLock();
+        UndoableEdit temp = content.remove(offset, length);
+        removeUpdate(event);
+        postRemoveUpdate(event);
+        fireRemoveUpdate(event);
+      }
+    finally
+      {
+        writeUnlock();
+      } 
   }
 
   /**

Reply via email to