summaryrefslogtreecommitdiff
path: root/libguile/inline.h
diff options
context:
space:
mode:
authorLudovic Courtes <ludovic.courtes@laas.fr>2006-04-02 21:04:30 +0000
committerLudovic Courtès <ludo@gnu.org>2008-09-05 00:46:07 +0200
commitc812243ba15a9d13bb6f1876892e7a1efea9bf4e (patch)
treef98d42018d65072f7542cae879f2ee45925a9e35 /libguile/inline.h
parent26224b3f5d795e523e921ec32ffec424893ea035 (diff)
downloadguile-c812243ba15a9d13bb6f1876892e7a1efea9bf4e.tar.gz
Small fixes. Gets to the REPL and `abort ()'s soon after.
* libguile/inline.h (scm_cell): Re-added comment about the assignment order of CAR/CDR. * libguile/srcprop.c (scm_make_srcprops): Use `scm_gc_malloc ()' instead of `malloc' + `scm_gc_register_collectable_memory ()'. * libguile/threads.c (guilify_self_1): Likewise. (guilify_self_2): Likewise. * libguile/strings.c (make_stringbuf): Use `GC_MALLOC_ATOMIC ()' instead of `scm_gc_malloc ()'. git-archimport-id: lcourtes@laas.fr--2005-libre/guile-core--boehm-gc--1.9--patch-2
Diffstat (limited to 'libguile/inline.h')
-rw-r--r--libguile/inline.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/libguile/inline.h b/libguile/inline.h
index 5337c90a5..122455cee 100644
--- a/libguile/inline.h
+++ b/libguile/inline.h
@@ -73,8 +73,12 @@ scm_cell (scm_t_bits car, scm_t_bits cdr)
{
SCM cell = SCM_PACK ((scm_t_bits) (GC_malloc (sizeof (scm_t_cell))));
- SCM_GC_SET_CELL_WORD (cell, 0, car);
+ /* Initialize the type slot last so that the cell is ignored by the GC
+ until it is completely initialized. This is only relevant when the GC
+ can actually run during this code, which it can't since the GC only runs
+ when all other threads are stopped. */
SCM_GC_SET_CELL_WORD (cell, 1, cdr);
+ SCM_GC_SET_CELL_WORD (cell, 0, car);
return cell;
}