Mercurial > emacs
diff src/alloc.c @ 68430:47782d80f30b
* alloc.c (make_interval, allocate_string)
(allocate_string_data, make_float, Fcons, allocate_vectorlike)
(Fmake_symbol, allocate_misc): Use BLOCK_INPUT when accessing
global variables.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Fri, 27 Jan 2006 22:14:57 +0000 |
parents | cec05baae14f |
children | 2892a36e596e 9b150bc96d33 7432ca837c8d |
line wrap: on
line diff
--- a/src/alloc.c Fri Jan 27 22:08:11 2006 +0000 +++ b/src/alloc.c Fri Jan 27 22:14:57 2006 +0000 @@ -1422,7 +1422,11 @@ { INTERVAL val; - eassert (!handling_signal); + /* eassert (!handling_signal); */ + +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif if (interval_free_list) { @@ -1445,6 +1449,11 @@ } val = &interval_block->intervals[interval_block_index++]; } + +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + consing_since_gc += sizeof (struct interval); intervals_consed++; RESET_INTERVAL (val); @@ -1842,7 +1851,11 @@ { struct Lisp_String *s; - eassert (!handling_signal); + /* eassert (!handling_signal); */ + +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif /* If the free-list is empty, allocate a new string_block, and add all the Lisp_Strings in it to the free-list. */ @@ -1873,6 +1886,10 @@ s = string_free_list; string_free_list = NEXT_FREE_LISP_STRING (s); +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + /* Probably not strictly necessary, but play it safe. */ bzero (s, sizeof *s); @@ -1920,6 +1937,12 @@ /* Determine the number of bytes needed to store NBYTES bytes of string data. */ needed = SDATA_SIZE (nbytes); + old_data = s->data ? SDATA_OF_STRING (s) : NULL; + old_nbytes = GC_STRING_BYTES (s); + +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif if (nbytes > LARGE_STRING_BYTES) { @@ -1974,12 +1997,13 @@ else b = current_sblock; - old_data = s->data ? SDATA_OF_STRING (s) : NULL; - old_nbytes = GC_STRING_BYTES (s); - data = b->next_free; b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA); +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + data->string = s; s->data = SDATA_DATA (data); #ifdef GC_CHECK_STRING_BYTES @@ -2560,7 +2584,11 @@ { register Lisp_Object val; - eassert (!handling_signal); + /* eassert (!handling_signal); */ + +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif if (float_free_list) { @@ -2587,6 +2615,10 @@ float_block_index++; } +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + XFLOAT_DATA (val) = float_value; eassert (!FLOAT_MARKED_P (XFLOAT (val))); consing_since_gc += sizeof (struct Lisp_Float); @@ -2681,7 +2713,11 @@ { register Lisp_Object val; - eassert (!handling_signal); + /* eassert (!handling_signal); */ + +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif if (cons_free_list) { @@ -2707,6 +2743,10 @@ cons_block_index++; } +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + XSETCAR (val, car); XSETCDR (val, cdr); eassert (!CONS_MARKED_P (XCONS (val))); @@ -2880,8 +2920,17 @@ consing_since_gc += nbytes; vector_cells_consed += len; +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif + p->next = all_vectors; all_vectors = p; + +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + ++n_vectors; return p; } @@ -3162,6 +3211,10 @@ eassert (!handling_signal); +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif + if (symbol_free_list) { XSETSYMBOL (val, symbol_free_list); @@ -3183,6 +3236,10 @@ symbol_block_index++; } +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + p = XSYMBOL (val); p->xname = name; p->plist = Qnil; @@ -3242,7 +3299,11 @@ { Lisp_Object val; - eassert (!handling_signal); + /* eassert (!handling_signal); */ + +#ifndef SYNC_INPUT + BLOCK_INPUT; +#endif if (marker_free_list) { @@ -3266,6 +3327,10 @@ marker_block_index++; } +#ifndef SYNC_INPUT + UNBLOCK_INPUT; +#endif + --total_free_markers; consing_since_gc += sizeof (union Lisp_Misc); misc_objects_consed++;