180 |
void |
void |
181 |
scm_gc_register_collectable_memory (void *mem, size_t size, const char *what) |
scm_gc_register_collectable_memory (void *mem, size_t size, const char *what) |
182 |
{ |
{ |
183 |
|
if (ULONG_MAX - size < scm_mallocated) |
184 |
|
{ |
185 |
|
scm_memory_error ("Overflow of scm_mallocated: too much memory in use."); |
186 |
|
} |
187 |
|
|
188 |
scm_mallocated += size; |
scm_mallocated += size; |
189 |
|
|
190 |
/* |
/* |
235 |
float no_overflow_trigger = scm_mallocated * 110.0; |
float no_overflow_trigger = scm_mallocated * 110.0; |
236 |
|
|
237 |
no_overflow_trigger /= (float) (100.0 - scm_i_minyield_malloc); |
no_overflow_trigger /= (float) (100.0 - scm_i_minyield_malloc); |
238 |
scm_mtrigger = (unsigned long) no_overflow_trigger; |
|
239 |
|
|
240 |
|
if (no_overflow_trigger >= (float) ULONG_MAX) |
241 |
|
scm_mtrigger = ULONG_MAX; |
242 |
|
else |
243 |
|
scm_mtrigger = (unsigned long) no_overflow_trigger; |
244 |
|
|
245 |
#ifdef DEBUGINFO |
#ifdef DEBUGINFO |
246 |
fprintf (stderr, "Mtrigger sweep: ineffective. New trigger %d\n", |
fprintf (stderr, "Mtrigger sweep: ineffective. New trigger %d\n", |
278 |
again in scm_gc_register_collectable_memory. We don't really |
again in scm_gc_register_collectable_memory. We don't really |
279 |
want the second GC since it will not find new garbage. |
want the second GC since it will not find new garbage. |
280 |
|
|
|
|
|
281 |
Note: this is a theoretical peeve. In reality, malloc() never |
Note: this is a theoretical peeve. In reality, malloc() never |
282 |
returns NULL. Usually, memory is overcommitted, and when you try |
returns NULL. Usually, memory is overcommitted, and when you try |
283 |
to write it the program is killed with signal 11. --hwn |
to write it the program is killed with signal 11. --hwn |