From 0b73cbb69fd1194bcf8b6d6a13d0ebe3e1690c6c Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 16 Jan 2012 10:03:38 +0100 Subject: [PATCH] sds.c no longe pre-allocate more than 1MB of free space ahead. This fixes issue #252. --- src/sds.c | 6 +++++- src/sds.h | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sds.c b/src/sds.c index 50369de1b..0a635701a 100644 --- a/src/sds.c +++ b/src/sds.c @@ -107,7 +107,11 @@ static sds sdsMakeRoomFor(sds s, size_t addlen) { if (free >= addlen) return s; len = sdslen(s); sh = (void*) (s-(sizeof(struct sdshdr))); - newlen = (len+addlen)*2; + newlen = (len+addlen); + if (newlen < SDS_MAX_PREALLOC) + newlen *= 2; + else + newlen += SDS_MAX_PREALLOC; newsh = zrealloc(sh, sizeof(struct sdshdr)+newlen+1); #ifdef SDS_ABORT_ON_OOM if (newsh == NULL) sdsOomAbort(); diff --git a/src/sds.h b/src/sds.h index aa6f1781e..902e7c659 100644 --- a/src/sds.h +++ b/src/sds.h @@ -31,6 +31,8 @@ #ifndef __SDS_H #define __SDS_H +#define SDS_MAX_PREALLOC (1024*1024) + #include #include -- GitLab