You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@netbeans.apache.org by Emilian Bold <em...@gmail.com> on 2020/07/12 21:33:38 UTC
Racing condition in DataFolder.setSortMode(DataFolder.SortMode.LAST_MODIFIED)?
I have a strong suspicion that org-openide-loaders
DataFolder.setSortMode(DataFolder.SortMode.LAST_MODIFIED)
could lead to a racing condition in the sorting and cause something like
https://bz.apache.org/netbeans/show_bug.cgi?id=257997
java.lang.IllegalArgumentException: Comparison method violates its
general contract!
at java.util.TimSort.mergeHi(TimSort.java:868)
at java.util.TimSort.mergeAt(TimSort.java:485)
at java.util.TimSort.mergeForceCollapse(TimSort.java:426)
at java.util.TimSort.sort(TimSort.java:223)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
at
org.openide.loaders.FolderList.carefullySort(FolderList.java:600)
at
org.openide.loaders.FolderList.getObjects(FolderList.java:570)
at org.openide.loaders.FolderList.access$600(FolderList.java:77)
at
org.openide.loaders.FolderList$ComparatorTask.run(FolderList.java:1028)
The reason being that the file timestamp might change *while* the list
if being sorted and
break the comparator contract.
(I also suspect that perhaps some DataObject instantiation could
further delay things long enough for a timestamp to be changed but
this is not really required.)
FolderComparator(FolderComparator.LAST_MODIFIED) as used by DataFolder
needs to be looked at perhaps.
I wonder, does the filesystem prevent the timestamp from being changed
during that careful sorting? Or is there some other locking preventing
this? It's a bit of work but I think a test case could be created
reproducing it.
--emi
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@netbeans.apache.org
For additional commands, e-mail: users-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists