author | Shawn O. Pearce <spearce@spearce.org> | |
Mon, 5 Mar 2007 17:31:09 +0000 (12:31 -0500) | ||
committer | Shawn O. Pearce <spearce@spearce.org> | |
Mon, 5 Mar 2007 17:31:09 +0000 (12:31 -0500) | ||
commit | 734c91f9e292cf6ed1401c178bc9fbb902cc82dd | |
tree | 856bfb7910a03f250e85caa584c83b03a31cd326 | tree | snapshot |
parent | 7193db3685b71be3e93aaac785bdc554d91d2167 | commit | diff |
fast-import: Avoid infinite loop after reset
Johannes Sixt noticed that a 'reset' command applied to a branch that
is already active in the branch LRU cache can cause fast-import to
relink the same branch into the LRU cache twice. This will cause
the LRU cache to contain a cycle, making unload_one_branch run in an
infinite loop as it tries to select the oldest branch for eviction.
I have trivially fixed the problem by adding an active bit to
each branch object; this bit indicates if the branch is already
in the LRU and allows us to avoid trying to add it a second time.
Converting the pack_id field into a bitfield makes this change take
up no additional memory.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Johannes Sixt noticed that a 'reset' command applied to a branch that
is already active in the branch LRU cache can cause fast-import to
relink the same branch into the LRU cache twice. This will cause
the LRU cache to contain a cycle, making unload_one_branch run in an
infinite loop as it tries to select the oldest branch for eviction.
I have trivially fixed the problem by adding an active bit to
each branch object; this bit indicates if the branch is already
in the LRU and allows us to avoid trying to add it a second time.
Converting the pack_id field into a bitfield makes this change take
up no additional memory.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
fast-import.c | diff | blob | history |