From: Paul Eggert Date: Sat, 30 Aug 2014 23:29:23 +0000 (-0700) Subject: * fns.c (sort_vector): Fix GC bug in previous change. X-Git-Tag: emacs-25.0.90~2635^2~679^2~386 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0ac6761dfb5a9d867769de75a48edf1844e297cc;p=emacs.git * fns.c (sort_vector): Fix GC bug in previous change. --- 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,