summaryrefslogtreecommitdiff
path: root/gnu/usr.bin
diff options
context:
space:
mode:
authorStefan Sperling <stsp@cvs.openbsd.org>2009-12-14 21:15:56 +0000
committerStefan Sperling <stsp@cvs.openbsd.org>2009-12-14 21:15:56 +0000
commitc1d04e5481ab2a45629ba5f2d1cb29e7f6d0fe8a (patch)
tree08176a66ee32d1fbb10b143f4baf8c84cd030caa /gnu/usr.bin
parent6e4fc502035d31ccb93a55c098c5af187f7a2458 (diff)
Fix "cvs [update aborted]: out of memory; can not reallocate 5242880 bytes"
when checking out xenocara from a server running OpenBSD/amd64. While processing RCS deltas, don't allocate twice as much memory as needed when copying a line vector to a vector which has less lines. Also, when switching back from a branch to trunk while searching an RCS file for a revision, free the trunklines vector immediately after lines saved in it have been copied back into the currentlines vector. Somehow, these two changes together make the problem go away. ok tobias@, "this has been a serious annoyance" sthen@, "sure" deraadt@
Diffstat (limited to 'gnu/usr.bin')
-rw-r--r--gnu/usr.bin/cvs/src/rcs.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/gnu/usr.bin/cvs/src/rcs.c b/gnu/usr.bin/cvs/src/rcs.c
index 4260952e10e..6b003353e51 100644
--- a/gnu/usr.bin/cvs/src/rcs.c
+++ b/gnu/usr.bin/cvs/src/rcs.c
@@ -6758,10 +6758,7 @@ linevector_copy (to, from)
}
if (from->nlines > to->lines_alloced)
{
- if (to->lines_alloced == 0)
- to->lines_alloced = 10;
- while (from->nlines > to->lines_alloced)
- to->lines_alloced *= 2;
+ to->lines_alloced = from->nlines;
to->vector = (struct line **)
xrealloc (to->vector, to->lines_alloced * sizeof (*to->vector));
}
@@ -7184,6 +7181,8 @@ RCS_deltas (rcs, fp, rcsbuf, version, op, text, len, log, loglen)
vers = trunk_vers;
next = vers->next;
linevector_copy (&curlines, &trunklines);
+ linevector_free (&trunklines);
+ linevector_init (&trunklines);
}
}
else