<Swing Dev> [9] Review Request for 8030702: Deadlock between subclass of AbstractDocument and UndoManager

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Mon Aug 3 12:12:16 UTC 2015


On 7/31/2015 9:44 AM, Semyon Sadetsky wrote:
> Good question. But I did not add a concrete class.
> The problem is that UndoManager provided by JDK wants to be serialized 
> but undoable objects knows nothing about that. The contract between 
> UndoManager and undoable is UndoableEditListener which only notifies 
> UndoManager to add a new edit. AbstractDocument does not care about 
> the specific UndoManager implementation and it can contain plenty 
> different UndoableEditListener. That is the current API approach.
> If our specific UndoManager wants to be serialized it should also take 
> into account that the undoable it controls may require serialization. 
> For that it needs undoable's synchronization monitor and 
> AbstractDocument can provide it using writeLock()/writeUnlock() 
> methods. I assumed that in the first turn UndoManger should work well 
> with JDK undoables than to serve as a general implementation. Also I 
> tried to preserve  the current API.
> And your suggestion is to change the existing UndoableEditListener API 
> by introducing synchronization methods in it. Am I correctly 
> understand you?

    What I said is that UndoManager can be used not only by 
AbstractDocument but also in other classes which can have the same 
synchronization problems.
    There should be a way to solve these problems without storing links 
of external classes inside the UndoManager.

   Thanks,
   Alexandr.

>
> --Semyon
>
>
> On 7/30/2015 5:27 PM, Alexander Scherbatiy wrote:
>>
>>    Consider someone writes Java Painter application where it is 
>> possible to draw lines and images and uses UndoManager for undo/redo 
>> actions.
>>    He might want that it was possible to work with copied images. He 
>> can get lock on ctrl+v action, process an image, prepare UndoableEdit 
>> and notify the UndoManager.
>>    He also can use lock/unlock in the undo action to have a 
>> consistent state with the processed image. If someone calls undo 
>> action during the image processing and gets a deadlock does it mean 
>> that link from Java Painter need to be added to the UndoManager?
>>
>>   Thanks,
>>   Alexandr.
>>
>>>>    It looks like AbstractDocument violates UndoManager 
>>>> synchronization contract when it both use lock to work with 
>>>> UndoManager and in the implemented undo() method.
>>>>
>>>>   Thanks,
>>>>   Alexandr.
>>>>
>>>>>
>>>>> --Semyon
>>>>>
>>>>
>>>
>>
>




More information about the swing-dev mailing list