diff options
| author | Paul Eggert | 2020-08-15 10:48:36 -0700 |
|---|---|---|
| committer | Paul Eggert | 2020-08-15 11:19:51 -0700 |
| commit | d0145537fa511a44e2a4af01da3947e92f0b8331 (patch) | |
| tree | 0b098e725155c3b40031e0ecb8c65bbb25a6e402 /src/nsxwidget.m | |
| parent | 4cba236749aafade7bd88cf2a10be48f44983faa (diff) | |
| download | emacs-d0145537fa511a44e2a4af01da3947e92f0b8331.tar.gz emacs-d0145537fa511a44e2a4af01da3947e92f0b8331.zip | |
Fix GC bugs related to uninitialized vectors
Avoid problems if GC occurs while initializing a vector.
Problem with Fdelete reported by Pip Cet in:
https://lists.gnu.org/r/emacs-devel/2020-08/msg00313.html
I looked for similar problems elsewhere and found quite a few.
* src/coding.c (make_subsidiaries):
* src/composite.c (syms_of_composite):
* src/font.c (build_style_table, Ffont_get_glyphs):
* src/nsselect.m (clean_local_selection_data):
* src/nsxwidget.m (js_to_lisp):
* src/syntax.c (init_syntax_once):
* src/window.c (Fcurrent_window_configuration):
* src/xselect.c (selection_data_to_lisp_data)
(clean_local_selection_data):
Use make_nil_vector instead of make_uninit_vector.
* src/fns.c (Fdelete):
* src/xwidget.c (webkit_js_to_lisp):
Use allocate_nil_vector instead of allocate_vector.
* src/search.c (Fnewline_cache_check):
Use make_vector instead of make_uninit_vector.
Diffstat (limited to 'src/nsxwidget.m')
| -rw-r--r-- | src/nsxwidget.m | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/nsxwidget.m b/src/nsxwidget.m index 370abee395c..e81ca7fc0cb 100644 --- a/src/nsxwidget.m +++ b/src/nsxwidget.m | |||
| @@ -388,7 +388,7 @@ js_to_lisp (id value) | |||
| 388 | NSArray *nsarr = (NSArray *) value; | 388 | NSArray *nsarr = (NSArray *) value; |
| 389 | EMACS_INT n = nsarr.count; | 389 | EMACS_INT n = nsarr.count; |
| 390 | Lisp_Object obj; | 390 | Lisp_Object obj; |
| 391 | struct Lisp_Vector *p = allocate_vector (n); | 391 | struct Lisp_Vector *p = allocate_nil_vector (n); |
| 392 | 392 | ||
| 393 | for (ptrdiff_t i = 0; i < n; ++i) | 393 | for (ptrdiff_t i = 0; i < n; ++i) |
| 394 | p->contents[i] = js_to_lisp ([nsarr objectAtIndex:i]); | 394 | p->contents[i] = js_to_lisp ([nsarr objectAtIndex:i]); |
| @@ -401,7 +401,7 @@ js_to_lisp (id value) | |||
| 401 | NSArray *keys = nsdict.allKeys; | 401 | NSArray *keys = nsdict.allKeys; |
| 402 | ptrdiff_t n = keys.count; | 402 | ptrdiff_t n = keys.count; |
| 403 | Lisp_Object obj; | 403 | Lisp_Object obj; |
| 404 | struct Lisp_Vector *p = allocate_vector (n); | 404 | struct Lisp_Vector *p = allocate_nil_vector (n); |
| 405 | 405 | ||
| 406 | for (ptrdiff_t i = 0; i < n; ++i) | 406 | for (ptrdiff_t i = 0; i < n; ++i) |
| 407 | { | 407 | { |