It fixes bug in RSL, adds WSL diagnostics and removes code that tries to do the job of select.
diff -uwr freenet-unstable-latest/src/freenet/node/Main.java Myfreenet-unstable-latest/src/freenet/node/Main.java --- freenet-unstable-latest/src/freenet/node/Main.java 2003-10-04 05:00:44.000000000 +0100 +++ Myfreenet-unstable-latest/src/freenet/node/Main.java 2003-10-11 11:13:46.000000000 +0100 @@ -1742,6 +1742,10 @@ "restart an existing session (key).",outConn); d.registerCounting("outboundOpenerConnections",d.MINUTE, "The number of connections the Connection Opener starts",outConn); + d.registerCounting("writeSelectionScrewed", d.MINUTE, + "The number of times NIO makes a zero byte "+ + "write after the JVM told it that the socket "+ + "was writable.", outConn); // inbound connections diff -uwr freenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java Myfreenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java --- freenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java 2003-10-09 17:00:58.000000000 +0100 +++ Myfreenet-unstable-latest/src/freenet/transport/AbstractSelectorLoop.java 2003-10-11 15:32:10.000000000 +0100 @@ -337,11 +337,6 @@ protected abstract boolean inspectChannels(); /** - * this fixes the keyset. We're missing reads - */ - protected abstract void fixKeys(); - - /** * last-mile remedy if the selector is totaly screwed. * this may very well have unforeseen consequences. * lets hope we never get to use this... @@ -593,16 +588,6 @@ // " connections ("+iter+")", Logger.DEBUG); currentSet=sel.selectedKeys(); - //currentSet.clear(); - //currentSet.addAll(sel.selectedKeys()); - - if(logDebug) - Core.logger.log(this, "Keys ready before fixKeys: "+ - currentlyActive+"/"+ - sel.keys().size(), Logger.DEBUG); - - fixKeys(); - //if (currentlyActive != currentSet.size()) Core.logger.log(this, "read the freaking book! "+ currentlyActive +" != "+ currentSet.size() ,Logger.ERROR); currentlyActive = currentSet.size(); if(logDebug) Core.logger.log(this, "Keys ready: "+currentlyActive+"/"+ diff -uwr freenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java Myfreenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java --- freenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java 2003-09-26 11:01:30.000000000 +0100 +++ Myfreenet-unstable-latest/src/freenet/transport/ReadSelectorLoop.java 2003-10-11 12:11:18.000000000 +0100 @@ -144,35 +144,6 @@ } /** - * we're missing reads. This will try and fix it - */ - protected final void fixKeys() { -// Set bigSet = sel.keys(); -// //Core.logger.log(this,"size of bigSet "+bigSet.size() -// // + " size of smallSet " + currentSet.size(),Logger.NORMAL); -// Iterator i = bigSet.iterator(); - -// while (i.hasNext()) { -// SelectionKey current = (SelectionKey) i.next(); - -// if (current.isValid() && current.isReadable()) { -// // Don't check open, we need to see them as readable and -// // then get the -1 read -// if (logDebug)Core.logger.log(this, "fixKeys added "+ -// current.channel()+":"+ -// current.attachment(), -// Logger.DEBUG); -// //Core.logger.log(this,"told you so!",Logger.ERROR); -// currentSet.add(current); -// } - -// } - -// //Core.logger.log(this,"size of small set after fixing " + currentSet.size(),Logger.NORMAL); - //Core.logger.log(this,"size of small set after fixing " + f.size(),Logger.NORMAL);*/ - } - - /** * a screwed channel is marked as available for read, but * a read() call on it returns -1. Therefore... */ @@ -237,11 +208,11 @@ if (logDebug)logBumper(bumper, sc, nc, 2); try { size = sc.read(bumper); + i.remove(); if(size == 0) { Core.diagnostics.occurrenceCounting("readinessSelectionScrewed",1); bumper.flip(); screwedSelections++; - i.remove(); //noneWorking=false; //this isn't really a dud either //and guess what happens - rsl starts sleeping 10 to 20 times a second //which makes tons of system calls and the sys cpu usage stays up steady diff -uwr freenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java Myfreenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java --- freenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java 2003-10-07 21:04:44.000000000 +0100 +++ Myfreenet-unstable-latest/src/freenet/transport/WriteSelectorLoop.java 2003-10-11 15:38:55.000000000 +0100 @@ -295,21 +295,6 @@ } /** - * recent long waits in CHOS.write prompted me to do this here as well - */ - protected final void fixKeys() { - //this never adds anything - Iterator i = sel.keys().iterator(); - while (i.hasNext()) { - SelectionKey current = (SelectionKey) i.next(); - if (current.isValid() && current.isWritable() - && (!currentSet.contains(current))) - Core.logger.log(this, "fixKeys added "+current, - Logger.NORMAL); - currentSet.add(current); - } - } - /** * overriden so that it will block when there is nothing * to send. Otherwise the selector enters an endless loop */ @@ -590,8 +575,10 @@ try { sent = ((SocketChannel)curKey.channel()). write(currentJob.data); - //this should be here, not in finally - //if (sent==0) currentSet.remove(curKey); + currentSet.remove(curKey); // not needed but harmless + if (sent == 0) { + Core.diagnostics.occurrenceCounting("writeSelectionScrewed",1); + } } finally { if(currentJob.data.limit() != oldLimit) currentJob.data.limit(oldLimit); @@ -719,9 +706,7 @@ e, e, Logger.ERROR); e.printStackTrace(); success=false; - } /*finally { - currentSet.clear(); //not needed anymore - }*/ + } return success; }
_______________________________________________ Devl mailing list [EMAIL PROTECTED] http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/devl