* gnu/java/nio/SelectorImpl.java

(selectThreadMutex): New field.
	(selectThread): New field.
	(unhandledWakeup): New field.
	(implCloseSelector): Added skeleton code which
	synchronizes as per Sun JRE JavaDoc.
	(keys): Throw ClosedSelectorException if selector
	is closed.
	(selectNow): Added comment that we're faking out
	an immediate select with a one-microsecond-timeout one.
	(select): Use 0 instead of -1 for infinite timeout.
	(implSelect): Changed comment in declaration.
	(select): Added synchronized to method declaration.
	Added synchronization and wakeup support as per Sun
	JRE JavaDoc.
	(selectedKeys): Throw ClosedSelectorException if selector
	is closed.
	(wakeup): Implemented.
	(deregisterCancelledKeys): Synchronize on cancelled key
	set before deregistering.
	(register): Synchronize on key set before registering.
	* java/nio/channels/spi/AbstractSelector.java
	Added import for java.nio.channels.ClosedSelectorException.
	(close): Added synchronized to method declaration.
	(cancelledKeys): Throw ClosedSelectorException if selector
	is closed.
	(cancelKey): Synchronize on cancelled key set before key.

From-SVN: r74879
This commit is contained in:
Mohan Embar 2003-12-20 15:33:24 +00:00 committed by Mohan Embar
parent 59687e1890
commit 677f99cce5
3 changed files with 248 additions and 82 deletions

View file

@ -39,6 +39,7 @@ exception statement from your version. */
package java.nio.channels.spi;
import java.io.IOException;
import java.nio.channels.ClosedSelectorException;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.util.Set;
@ -64,7 +65,7 @@ public abstract class AbstractSelector extends Selector
*
* @exception IOException If an error occurs
*/
public final void close () throws IOException
public final synchronized void close () throws IOException
{
if (closed)
return;
@ -102,12 +103,18 @@ public abstract class AbstractSelector extends Selector
protected final Set cancelledKeys()
{
if (!isOpen())
throw new ClosedSelectorException();
return cancelledKeys;
}
final void cancelKey (AbstractSelectionKey key)
{
cancelledKeys.remove (key);
synchronized (cancelledKeys)
{
cancelledKeys.remove(key);
}
}
/**