RFR: 8325179: Race in BasicDirectoryModel.validateFileCache [v2]
Alexey Ivanov
aivanov at openjdk.org
Wed Mar 6 11:32:45 UTC 2024
On Wed, 6 Mar 2024 10:43:16 GMT, Tejesh R <tr at openjdk.org> wrote:
>> Alexey Ivanov has updated the pull request incrementally with four additional commits since the last revision:
>>
>> - Replace synchronized invalidateFileCache with synchronized block inside
>> - Declare DoChangeContents constructor private, wrap its parameters
>> - Space after synchronized in DoChangeContents.run
>> - Convert runnable to local variable
>
> src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java line 552:
>
>> 550: if (remSize > 0 && addSize == 0) {
>> 551: fireIntervalRemoved(BasicDirectoryModel.this, remStart, remStart + remSize - 1);
>> 552: } else if (addSize > 0 && remSize == 0 && addStart + addSize <= fileCache.size()) {
>
> Any reason for moving this portion out of `Synchronized` block? Because `fileCache.size()` might need to be inside the `Synchronized` block right?
I didn't touch it, it never was inside the synchronized block. Only indentation was changed in this method.
However, you're right it's better to store the size of `fileCache` inside the synchronized block. The lock should not be held while notifying listeners.
On the other hand, `fileCache` can't change. The only place where `fileCache` is modified is above in this method, and only on EDT. The EDT will remain busy until a `fire*` method returns.
I've updated the code to avoid any confusion. Thanks!
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18111#discussion_r1514311500
More information about the client-libs-dev
mailing list