44 // The poll object
45 private final DevPollArrayWrapper pollWrapper;
46
47 // Maps from file descriptors to keys
48 private final Map<Integer, SelectionKeyImpl> fdToKey;
49
50 // True if this Selector has been closed
51 private boolean closed;
52
53 // Lock for close/cleanup
54 private final Object closeLock = new Object();
55
56 // Lock for interrupt triggering and clearing
57 private final Object interruptLock = new Object();
58 private boolean interruptTriggered;
59
60 /**
61 * Package private constructor called by factory method in
62 * the abstract superclass Selector.
63 */
64 DevPollSelectorImpl(SelectorProvider sp) {
65 super(sp);
66 long pipeFds = IOUtil.makePipe(false);
67 fd0 = (int) (pipeFds >>> 32);
68 fd1 = (int) pipeFds;
69 try {
70 pollWrapper = new DevPollArrayWrapper();
71 pollWrapper.initInterrupt(fd0, fd1);
72 fdToKey = new HashMap<>();
73 } catch (Throwable t) {
74 try {
75 FileDispatcherImpl.closeIntFD(fd0);
76 } catch (IOException ioe0) {
77 t.addSuppressed(ioe0);
78 }
79 try {
80 FileDispatcherImpl.closeIntFD(fd1);
81 } catch (IOException ioe1) {
82 t.addSuppressed(ioe1);
83 }
84 throw t;
|
44 // The poll object
45 private final DevPollArrayWrapper pollWrapper;
46
47 // Maps from file descriptors to keys
48 private final Map<Integer, SelectionKeyImpl> fdToKey;
49
50 // True if this Selector has been closed
51 private boolean closed;
52
53 // Lock for close/cleanup
54 private final Object closeLock = new Object();
55
56 // Lock for interrupt triggering and clearing
57 private final Object interruptLock = new Object();
58 private boolean interruptTriggered;
59
60 /**
61 * Package private constructor called by factory method in
62 * the abstract superclass Selector.
63 */
64 DevPollSelectorImpl(SelectorProvider sp) throws IOException {
65 super(sp);
66 long pipeFds = IOUtil.makePipe(false);
67 fd0 = (int) (pipeFds >>> 32);
68 fd1 = (int) pipeFds;
69 try {
70 pollWrapper = new DevPollArrayWrapper();
71 pollWrapper.initInterrupt(fd0, fd1);
72 fdToKey = new HashMap<>();
73 } catch (Throwable t) {
74 try {
75 FileDispatcherImpl.closeIntFD(fd0);
76 } catch (IOException ioe0) {
77 t.addSuppressed(ioe0);
78 }
79 try {
80 FileDispatcherImpl.closeIntFD(fd1);
81 } catch (IOException ioe1) {
82 t.addSuppressed(ioe1);
83 }
84 throw t;
|