Skip to content
This repository has been archived by the owner on Oct 22, 2021. It is now read-only.

Commit

Permalink
keep track of number of bytes written so we update reset_pos correctly.
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert Newson committed Mar 22, 2011
1 parent e0430bb commit 532e7db
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions src/monic_file.erl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

-record(state, {
tid,
header_size,
index_fd=nil,
last_write=nil,
main_fd=nil,
Expand All @@ -33,6 +32,7 @@
remaining,
reset_pos,
sha,
written,
writer=nil
}).

Expand Down Expand Up @@ -133,8 +133,9 @@ handle_call({start_writing, Key, Cookie, Size}, From, #state{last_write=LastWrit
{noreply, State1}
end;

handle_call({write, Ref, {Bin, Next}}, _From, #state{header_size=HeaderSize, main_fd=Fd, next_header=Header,
remaining=Remaining, reset_pos=Pos, sha=Sha, writer=Ref}=State) ->
handle_call({write, Ref, {Bin, Next}}, _From, #state{main_fd=Fd, next_header=Header,
remaining=Remaining, written=Written,
reset_pos=Pos, sha=Sha, writer=Ref}=State) ->
Size = iolist_size(Bin),
Write = case {Next, Remaining - Size} of
{_, Remaining1} when Remaining1 < 0 ->
Expand All @@ -154,15 +155,16 @@ handle_call({write, Ref, {Bin, Next}}, _From, #state{header_size=HeaderSize, mai
ok ->
monic_utils:write_term(State#state.index_fd, Header),
ets:insert(State#state.tid, Header),
{reply, ok, finish_write(Pos + HeaderSize + Size + FooterSize, State)};
{reply, ok, finish_write(Pos + Written + Size + FooterSize, State)};
Else ->
{reply, Else, abandon_write(State)}
end;
Else ->
{reply, Else, abandon_write(State)}
end;
{_, ok} ->
{reply, {continue, Next}, State#state{last_write=now(), remaining=Remaining-Size, sha=Sha1}};
{reply, {continue, Next}, State#state{last_write=now(), remaining=Remaining-Size,
written=Written+Size, sha=Sha1}};
{_, Else} ->
{reply, Else, abandon_write(State)}
end;
Expand Down Expand Up @@ -302,11 +304,11 @@ start_write(Key, Cookie, Size, #state{main_fd=MainFd,reset_pos=Pos,writer=nil}=S
{ok, HeaderSize} ->
{{ok, Ref}, State#state{
last_write=now(),
header_size=HeaderSize,
remaining=Size,
sha=crypto:sha_init(),
next_header=Header,
writer=Ref}};
writer=Ref,
written=HeaderSize}};
Else ->
{Else, abandon_write(State)}
end.
Expand Down

0 comments on commit 532e7db

Please sign in to comment.