[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117785: * fns.c (sort_vector): Fix GC bug in previo
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] trunk r117785: * fns.c (sort_vector): Fix GC bug in previous change. |
Date: |
Sat, 30 Aug 2014 23:29:28 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117785
revision-id: address@hidden
parent: address@hidden
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Sat 2014-08-30 16:29:23 -0700
message:
* fns.c (sort_vector): Fix GC bug in previous change.
modified:
src/fns.c fns.c-20091113204419-o5vbwnq5f7feedwu-203
=== modified file 'src/fns.c'
--- a/src/fns.c 2014-08-30 22:59:39 +0000
+++ b/src/fns.c 2014-08-30 23:29:23 +0000
@@ -1992,17 +1992,18 @@
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,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117785: * fns.c (sort_vector): Fix GC bug in previous change.,
Paul Eggert <=