99 |
|
|
100 |
static int scm_i_minyield_malloc; |
static int scm_i_minyield_malloc; |
101 |
|
|
|
static scm_t_mutex malloc_mutex; |
|
|
|
|
|
void |
|
|
scm_gc_malloc_prehistory () |
|
|
{ |
|
|
scm_i_plugin_mutex_init (&malloc_mutex, 0); |
|
|
} |
|
|
|
|
102 |
void |
void |
103 |
scm_gc_init_malloc (void) |
scm_gc_init_malloc (void) |
104 |
{ |
{ |
126 |
{ |
{ |
127 |
void *ptr; |
void *ptr; |
128 |
|
|
|
scm_i_plugin_mutex_lock (&malloc_mutex); |
|
129 |
SCM_SYSCALL (ptr = realloc (mem, size)); |
SCM_SYSCALL (ptr = realloc (mem, size)); |
|
scm_i_plugin_mutex_unlock (&malloc_mutex); |
|
130 |
if (ptr) |
if (ptr) |
131 |
return ptr; |
return ptr; |
132 |
|
|
134 |
|
|
135 |
scm_i_sweep_all_segments ("realloc"); |
scm_i_sweep_all_segments ("realloc"); |
136 |
|
|
|
scm_i_plugin_mutex_lock (&malloc_mutex); |
|
137 |
SCM_SYSCALL (ptr = realloc (mem, size)); |
SCM_SYSCALL (ptr = realloc (mem, size)); |
|
scm_i_plugin_mutex_unlock (&malloc_mutex); |
|
138 |
if (ptr) |
if (ptr) |
139 |
{ |
{ |
140 |
scm_i_thread_wake_up (); |
scm_i_thread_wake_up (); |
146 |
|
|
147 |
scm_i_thread_wake_up (); |
scm_i_thread_wake_up (); |
148 |
|
|
|
scm_i_plugin_mutex_lock (&malloc_mutex); |
|
149 |
SCM_SYSCALL (ptr = realloc (mem, size)); |
SCM_SYSCALL (ptr = realloc (mem, size)); |
|
scm_i_plugin_mutex_unlock (&malloc_mutex); |
|
150 |
if (ptr) |
if (ptr) |
151 |
return ptr; |
return ptr; |
152 |
|
|
172 |
By default, try to use calloc, as it is likely more efficient than |
By default, try to use calloc, as it is likely more efficient than |
173 |
calling memset by hand. |
calling memset by hand. |
174 |
*/ |
*/ |
|
scm_i_plugin_mutex_lock (&malloc_mutex); |
|
175 |
SCM_SYSCALL(ptr= calloc (sz, 1)); |
SCM_SYSCALL(ptr= calloc (sz, 1)); |
|
scm_i_plugin_mutex_unlock (&malloc_mutex); |
|
176 |
if (ptr) |
if (ptr) |
177 |
return ptr; |
return ptr; |
178 |
|
|