From 0ac6761dfb5a9d867769de75a48edf1844e297cc Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 30 Aug 2014 16:29:23 -0700 Subject: [PATCH] * fns.c (sort_vector): Fix GC bug in previous change. --- src/fns.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/fns.c b/src/fns.c index 57c57884f4d..6cc5cef95df 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1992,17 +1992,18 @@ sort_vector (Lisp_Object vector, Lisp_Object predicate) return; ptrdiff_t halflen = len >> 1; Lisp_Object *tmp; + Lisp_Object tmpvec = Qnil; struct gcpro gcpro1, gcpro2, gcpro3; - GCPRO3 (vector, predicate, predicate); - USE_SAFE_ALLOCA; - SAFE_ALLOCA_LISP (tmp, halflen); - for (ptrdiff_t i = 0; i < halflen; i++) - tmp[i] = make_number (0); - gcpro3.var = tmp; - gcpro3.nvars = halflen; + GCPRO3 (vector, predicate, tmpvec); + if (halflen < MAX_ALLOCA / word_size) + tmp = alloca (halflen * word_size); + else + { + tmpvec = Fmake_vector (make_number (halflen), make_number (0)); + tmp = XVECTOR (tmpvec)->contents; + } sort_vector_inplace (predicate, len, XVECTOR (vector)->contents, tmp); UNGCPRO; - SAFE_FREE (); } DEFUN ("sort", Fsort, Ssort, 2, 2, 0, -- 2.39.5