anchor.diff:  -module(etorrent_io_file).
   -behaviour(gen_server).
   -include("types.hrl").
  +-define(GC_TIMEOUT, 5000).
   
   %%
   %% Server that wraps a file-handle and exposes an interface
  
positive.code: 
  -spec start_link(torrent_id(), file_path(), file_path()) -> {'ok', pid()}.
  start_link(TorrentID, Path, FullPath) ->
      gen_server:start_link(?MODULE, [TorrentID, Path, FullPath], []).
  
  -spec open(pid()) -> 'ok'.
  open(FilePid) ->
  
negative.code: handle_call({read, Offset, Length}, _, State) ->
      #state{handle=Handle} = State,
      {ok, Chunk} = file:pread(Handle, Offset, Length),
      {reply, {ok, Chunk}, State, ?GC_TIMEOUT};
  handle_call({write, Offset, Chunk}, _, State) ->
      #state{handle=Handle} = State,
      ok = file:pwrite(Handle, Offset, Chunk),
      {reply, ok, State, ?GC_TIMEOUT}.
  
  handle_cast(open, State) ->
      #state{
  