summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/inline.h6
-rw-r--r--libguile/srcprop.c5
-rw-r--r--libguile/strings.c3
-rw-r--r--libguile/threads.c4
4 files changed, 11 insertions, 7 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;
}
diff --git a/libguile/srcprop.c b/libguile/srcprop.c
index e1b86738c..34c1ae173 100644
--- a/libguile/srcprop.c
+++ b/libguile/srcprop.c
@@ -112,11 +112,10 @@ scm_make_srcprops (long line, int col, SCM filename, SCM copy, SCM plist)
scm_t_srcprops_chunk *mem;
size_t n = sizeof (scm_t_srcprops_chunk)
+ sizeof (scm_t_srcprops) * (SRCPROPS_CHUNKSIZE - 1);
- SCM_SYSCALL (mem = (scm_t_srcprops_chunk *) scm_malloc (n));
+ mem = scm_gc_malloc (n, "srcprops");
if (mem == NULL)
scm_memory_error ("srcprops");
- scm_gc_register_collectable_memory (mem, n, "srcprops");
-
+
mem->next = srcprops_chunklist;
srcprops_chunklist = mem;
ptr = &mem->srcprops[0];
diff --git a/libguile/strings.c b/libguile/strings.c
index 947bcb498..1640e17bc 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -115,7 +115,8 @@ make_stringbuf (size_t len)
}
else
{
- char *mem = scm_gc_malloc (len+1, "string");
+ /* FIXME: Create an `scm_gc' equivalent to `GC_MALLOC_ATOMIC ()'. */
+ char *mem = GC_MALLOC_ATOMIC (len + 1);/* scm_gc_malloc (len+1, "string"); */
mem[len] = '\0';
return scm_double_cell (STRINGBUF_TAG, (scm_t_bits) mem,
(scm_t_bits) len, (scm_t_bits) 0);
diff --git a/libguile/threads.c b/libguile/threads.c
index 20b8e38c9..0ba059056 100644
--- a/libguile/threads.c
+++ b/libguile/threads.c
@@ -382,7 +382,7 @@ static SCM scm_i_default_dynamic_state;
static void
guilify_self_1 (SCM_STACKITEM *base)
{
- scm_i_thread *t = malloc (sizeof (scm_i_thread));
+ scm_i_thread *t = scm_gc_malloc (sizeof (scm_i_thread), "thread");
t->pthread = scm_i_pthread_self ();
t->handle = SCM_BOOL_F;
@@ -432,7 +432,7 @@ guilify_self_2 (SCM parent)
scm_i_thread *t = SCM_I_CURRENT_THREAD;
SCM_NEWSMOB (t->handle, scm_tc16_thread, t);
- scm_gc_register_collectable_memory (t, sizeof (scm_i_thread), "thread");
+
t->continuation_root = scm_cons (t->handle, SCM_EOL);
t->continuation_base = t->base;