FULL PRODUCT VERSION : java version "1.8.0_40" Java(TM) SE Runtime Environment (build 1.8.0_40-b25) Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode) ADDITIONAL OS VERSION INFORMATION : 3.19.0-25-generic #26~14.04.1-Ubuntu SMP EXTRA RELEVANT SYSTEM CONFIGURATION : ulimit -n 1024 A DESCRIPTION OF THE PROBLEM : EPollSelectorImpl doesn't close 2 file descriptors (fd0, fd1) if pollWrapper throws exception: EPollSelectorImpl(SelectorProvider sp) throws IOException { super(sp); long pipeFds = IOUtil.makePipe(false); fd0 = (int) (pipeFds >>> 32); fd1 = (int) pipeFds; pollWrapper = new EPollArrayWrapper(); pollWrapper.initInterrupt(fd0, fd1); fdToKey = new HashMap<>(); } STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : - Open many file descriptors: MAX_OPEN_FILE-2 - Try create epoll selector - EPollSelectorImpl opens pipe and consume last 2 descriptors - EPollSelectorImpl calls epoll_create syscall - EPollSelectorImpl throws IOException without closing pipe REPRODUCIBILITY : This bug can be reproduced rarely.
|