| Index: sdk/lib/io/file_impl.dart | 
| diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart | 
| index 5b4cddb0bd2b3f3490e00372834ba0ce5cb43581..d5e4cfc2950e1f203fa63a091a43800537f87a78 100644 | 
| --- a/sdk/lib/io/file_impl.dart | 
| +++ b/sdk/lib/io/file_impl.dart | 
| @@ -556,18 +556,51 @@ class _File extends FileSystemEntity implements File { | 
| } | 
|  | 
|  | 
| -class _RandomAccessFile implements RandomAccessFile { | 
| +class _RandomAccessFile | 
| +    extends Object with _ServiceObject | 
| +    implements RandomAccessFile { | 
| +  // Use default Map so we keep order. | 
| +  static Map<int, _RandomAccessFile> _files = new Map<int, _RandomAccessFile>(); | 
| + | 
| final String path; | 
| int _id; | 
| bool _asyncDispatched = false; | 
| SendPort _fileService; | 
|  | 
| -  _RandomAccessFile(this._id, this.path); | 
| + | 
| +  _RandomAccessFile(this._id, this.path) { | 
| +    _files[_serviceId] = this; | 
| +  } | 
| + | 
| +  String get _serviceTypePath => 'io/file/randomaccessfiles'; | 
| +  String get _serviceTypeName => 'RandomAccessFile'; | 
| + | 
| +  Map _toJSON(bool ref) { | 
| +    var r = { | 
| +      'id': _servicePath, | 
| +      'type': _serviceType(ref), | 
| +      'name': '$path', | 
| +      'user_name': '$path', | 
| +    }; | 
| +    if (ref) { | 
| +      return r; | 
| +    } | 
| +    r['asyncDispatched'] = _asyncDispatched; | 
| +    r['fd'] = _id; | 
| +    return r; | 
| +  } | 
| + | 
| +  void _maybePerformCleanup() { | 
| +    if (closed) { | 
| +      _files.remove(_serviceId); | 
| +    } | 
| +  } | 
|  | 
| Future<RandomAccessFile> close() { | 
| return _dispatch(_FILE_CLOSE, [_id], markClosed: true).then((result) { | 
| if (result != -1) { | 
| _id = result; | 
| +        _maybePerformCleanup(); | 
| return this; | 
| } else { | 
| throw new FileSystemException("Cannot close file", path); | 
| @@ -584,6 +617,7 @@ class _RandomAccessFile implements RandomAccessFile { | 
| throw new FileSystemException("Cannot close file", path); | 
| } | 
| _id = id; | 
| +    _maybePerformCleanup(); | 
| } | 
|  | 
| Future<int> readByte() { | 
|  |