# Tuesday, September 26, 2006
New Snapshot

More fixes and nio improvements and a regression fix.


  • Fixed SocketChannel.close() (was broken in previous snapshot).
  • Added support to VMThread for custom interruptable code regions.
  • Implemented SocketChannel interruptability and asynchronous close.
  • Implemented ServerSocketChannel interruptability and asynchronous close.
  • Almost completely rewrote SelectorImpl to fix many bugs and implement interruptability.
  • Fixed PlainDatagramSocketImpl.receive() to ignore WSAECONNRESET errors.
  • Optimized SelectorImpl to not create a new wakeup socket for each select.
  • Fixed regression introduced in 0.31 that caused NullReferenceException if a class had explicitly defined write-only properties (specified in an xml mapping file).

Source is in cvs. Binaries: ikvmbin-0.31.2460.zip

Tuesday, September 26, 2006 7:01:50 AM (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
# Friday, September 22, 2006
New Snapshot

More nio fixes. Azureus now works (sort of anyway). I also added a workaround for a bug in mcs that was exposed by my recent changes in the way final fields are handled.


  • Added workaround for mcs bug.
  • More nio fixes. Selector now works much better. Lots more work still needed.

Source is in cvs. Binaries: ikvmbin-0.31.2456.zip

Friday, September 22, 2006 7:59:08 AM (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
# Wednesday, September 20, 2006
New Snapshot

A new snapshot. Most significant change is the almost complete rewrite of the nio code, triggered by the GNU Classpath nio rewrite. The test coverage for nio is fairly abysmal, so hopefully I haven't introduced too many regressions. On the whole the new code should be equivalent to or better than the previous version, but there still remains a lot to be done.


  • Updated to current GNU Classpath cvs version.
  • Fixed streaming sockets to support SO_REUSEADDR socket option.
  • Changed ikvmc -resource option to strip unnecessary leading slash from resource name.
  • More code restructuring.
  • Added tracing to assembly resource and class loading.
  • Fixed ikvmstub to export non-public outer classes when an inner class is exported.
  • Simplified "save debug image" code to emit ikvmdump.dll instead of ikvmdump.exe (the resulting file has not been executable for a while, so it made no sense to pretend it was).
  • Rewrite of nio socket support code.

Source is in cvs. Binaries: ikvmbin-0.31.2454.zip

Wednesday, September 20, 2006 8:16:12 AM (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
# Tuesday, September 5, 2006
New Snapshot

A new snapshot with mainly bug fixes and code restructuring.


  • Updated to current GNU Classpath cvs version.
  • Fixed Class.forName() regression introduced in 0.28. Doing a Class.forName() on a .NET type using the assembly qualified name wouldn't run the class initializer.
  • Fixed System.arraycopy() performance regression introduced in 0.31 for ikvmc compiled code.
  • Changed java.lang.ref.Reference not to use a WeakReference if the referent is a Class object (since IKVM doesn't support Class gc, it would be a waste).
  • Fixed java.lang.ref.Reference memory leak (a reference associated with a ReferenceQueue would stay around until the referent was GCed).
  • Changed ikvmc to "critical fail" if it triggers a TypeResolve event. If you encounter these, please report them.
  • Fixed stub generator to set inner class access flags correctly in outer class InnerClasses attribute. Previously javac didn't recognize the Annotation inner interface in .NET custom attribute classes as annotation because the annotation bit wasn't set in the outer class.
  • Regenerated mscorlib.jar and System.jar. Removed System.Xml.jar.
  • Fixed bug in VMObjectStreamClass.hasClassInitializer that could cause it to throw a System.NotSupportedException on an array type when the element type was an unfinished dynamic type.
  • Fixed a bug in the hack that looks up the TimeZone.
  • Added IsErased and IsDynamicOnly properties to TypeWrapper.
  • Changed delegate handling to no longer emit the Method interface, but instead use static binding to the target method when possible and otherwise generate dynamic code.
  • Introduced generic handling of DynamicOnly interfaces (both the "Method" and "Annotation" interfaces in respectively delegates and custom attributes are now represented as DynamicOnly types -- i.e. they are implemented entirely through reflection.)
  • Changed bytecode compiler to call ikvm.runtime.getClassFromTypeHandle instead of IKVM.Runtime.GetClassFromTypeHandle for ldc <class> to remove the need to downcast the resulting object to Class.
  • Moved compilation options from static properties of JVM class to instance properties of ClassLoaderWrapper.
  • Did a little cleanup/reorganization of ikvmc.
  • Patched runtime/MemberWrapper.cs to work around gmcs bug.
  • Patched awt/toolkit.cs to work around gmcs bug.
  • Moved AotTypeWrapper static fields to CompilerClassLoader instance fields.
  • Removed TypeWrapper.Assembly property.
  • Fixed WeakReference tracker to use a WeakTrackResurrection handle, to be able to enqueue weak references that are only reachable via a finalizer or are resurrected.
  • Changed file.encoding system property from hardcoded 8859_1 to using System.Text.Encoding.Default.WebName.

Source is in cvs. Binaries: ikvmbin-0.31.2439.zip

Tuesday, September 5, 2006 7:17:14 AM (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]