* fns.c (sort_vector): Fix GC bug in previous change.
This commit is contained in:
parent
f9caea8233
commit
0ac6761dfb
1 changed files with 9 additions and 8 deletions
17
src/fns.c
17
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,
|
||||
|
|
Loading…
Add table
Reference in a new issue