Mercurial > emacs
comparison src/alloc.c @ 28411:ecba29fa0198
(xstrdup): Moved here from xfaces.c.
(allocating_for_lisp): Variable removed.
(lisp_malloc): Block input around the calls to malloc and
mem_insert.
| author | Gerd Moellmann <gerd@gnu.org> |
|---|---|
| date | Thu, 30 Mar 2000 09:29:22 +0000 |
| parents | 451721e784a8 |
| children | f66f2b4d5eb7 |
comparison
equal
deleted
inserted
replaced
| 28410:2812a333e746 | 28411:ecba29fa0198 |
|---|---|
| 167 #define SPARE_MEMORY (1 << 14) | 167 #define SPARE_MEMORY (1 << 14) |
| 168 | 168 |
| 169 /* Number of extra blocks malloc should get when it needs more core. */ | 169 /* Number of extra blocks malloc should get when it needs more core. */ |
| 170 | 170 |
| 171 static int malloc_hysteresis; | 171 static int malloc_hysteresis; |
| 172 | |
| 173 /* Nonzero when malloc is called for allocating Lisp object space. | |
| 174 Currently set but not used. */ | |
| 175 | |
| 176 int allocating_for_lisp; | |
| 177 | 172 |
| 178 /* Non-nil means defun should do purecopy on the function definition. */ | 173 /* Non-nil means defun should do purecopy on the function definition. */ |
| 179 | 174 |
| 180 Lisp_Object Vpurify_flag; | 175 Lisp_Object Vpurify_flag; |
| 181 | 176 |
| 462 free (block); | 457 free (block); |
| 463 UNBLOCK_INPUT; | 458 UNBLOCK_INPUT; |
| 464 } | 459 } |
| 465 | 460 |
| 466 | 461 |
| 462 /* Like strdup, but uses xmalloc. */ | |
| 463 | |
| 464 char * | |
| 465 xstrdup (s) | |
| 466 char *s; | |
| 467 { | |
| 468 int len = strlen (s) + 1; | |
| 469 char *p = (char *) xmalloc (len); | |
| 470 bcopy (s, p, len); | |
| 471 return p; | |
| 472 } | |
| 473 | |
| 474 | |
| 467 /* Like malloc but used for allocating Lisp data. NBYTES is the | 475 /* Like malloc but used for allocating Lisp data. NBYTES is the |
| 468 number of bytes to allocate, TYPE describes the intended use of the | 476 number of bytes to allocate, TYPE describes the intended use of the |
| 469 allcated memory block (for strings, for conses, ...). */ | 477 allcated memory block (for strings, for conses, ...). */ |
| 470 | 478 |
| 471 static void * | 479 static void * |
| 474 enum mem_type type; | 482 enum mem_type type; |
| 475 { | 483 { |
| 476 register void *val; | 484 register void *val; |
| 477 | 485 |
| 478 BLOCK_INPUT; | 486 BLOCK_INPUT; |
| 479 allocating_for_lisp++; | |
| 480 val = (void *) malloc (nbytes); | 487 val = (void *) malloc (nbytes); |
| 481 allocating_for_lisp--; | 488 |
| 482 UNBLOCK_INPUT; | |
| 483 | |
| 484 if (!val && nbytes) | |
| 485 memory_full (); | |
| 486 | |
| 487 #if GC_MARK_STACK | 489 #if GC_MARK_STACK |
| 488 if (type != MEM_TYPE_NON_LISP) | 490 if (val && type != MEM_TYPE_NON_LISP) |
| 489 mem_insert (val, (char *) val + nbytes, type); | 491 mem_insert (val, (char *) val + nbytes, type); |
| 490 #endif | 492 #endif |
| 491 | 493 |
| 494 UNBLOCK_INPUT; | |
| 495 if (!val && nbytes) | |
| 496 memory_full (); | |
| 492 return val; | 497 return val; |
| 493 } | 498 } |
| 494 | 499 |
| 495 | 500 |
| 496 /* Return a new buffer structure allocated from the heap with | 501 /* Return a new buffer structure allocated from the heap with |
| 510 void | 515 void |
| 511 lisp_free (block) | 516 lisp_free (block) |
| 512 long *block; | 517 long *block; |
| 513 { | 518 { |
| 514 BLOCK_INPUT; | 519 BLOCK_INPUT; |
| 515 allocating_for_lisp++; | |
| 516 free (block); | 520 free (block); |
| 517 #if GC_MARK_STACK | 521 #if GC_MARK_STACK |
| 518 mem_delete (mem_find (block)); | 522 mem_delete (mem_find (block)); |
| 519 #endif | 523 #endif |
| 520 allocating_for_lisp--; | |
| 521 UNBLOCK_INPUT; | 524 UNBLOCK_INPUT; |
| 522 } | 525 } |
| 523 | 526 |
| 524 | 527 |
| 525 /* Arranging to disable input signals while we're in malloc. | 528 /* Arranging to disable input signals while we're in malloc. |
