< prev index next >
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java
Print this page
rev 17684 : JDK-8175015: Fixed the memory leak that is happening due to listFiles, and also
improved the performance for isFileSystemRoot.
*** 441,471 ****
}
public boolean isFileSystemRoot(File dir) {
//Note: Removable drives don't "exist" but are listed in "My Computer"
if (dir != null) {
! Win32ShellFolder2 drives = getDrives();
if (dir instanceof Win32ShellFolder2) {
Win32ShellFolder2 sf = (Win32ShellFolder2)dir;
! if (sf.isFileSystem()) {
! if (sf.parent != null) {
! return sf.parent.equals(drives);
! }
! // else fall through ...
! } else {
! return false;
! }
}
String path = dir.getPath();
if (path.length() != 3 || path.charAt(1) != ':') {
return false;
}
! File[] files = drives.listFiles();
! return files != null && Arrays.asList(files).contains(dir);
}
return false;
}
private static List<Win32ShellFolder2> topFolderList = null;
--- 441,466 ----
}
public boolean isFileSystemRoot(File dir) {
//Note: Removable drives don't "exist" but are listed in "My Computer"
if (dir != null) {
!
if (dir instanceof Win32ShellFolder2) {
Win32ShellFolder2 sf = (Win32ShellFolder2)dir;
!
! return (sf.isFileSystem() && sf.parent != null &&
! sf.parent.equals(Win32ShellFolder2.listRoots()));
}
String path = dir.getPath();
if (path.length() != 3 || path.charAt(1) != ':') {
return false;
}
! File[] roots = Win32ShellFolder2.listRoots();
! return roots != null && Arrays.asList(roots).contains(dir);
}
return false;
}
private static List<Win32ShellFolder2> topFolderList = null;
*** 559,568 ****
--- 554,568 ----
*/
Thread thread = new Thread(
ThreadGroupUtils.getRootThreadGroup(), comRun, name,
0, false);
thread.setDaemon(true);
+ /* This is important, since this thread running at lower priority
+ leads to memory consumption when listDrives() function is called
+ repeatedly.
+ */
+ thread.setPriority(Thread.MAX_PRIORITY);
return thread;
});
return comThread;
}
< prev index next >