[Places] make jit code allocation place local

This commit is contained in:
Kevin Tew 2010-05-05 07:22:23 -06:00
parent 3d9a28eb50
commit 64ed4fb578
4 changed files with 6 additions and 29 deletions

View File

@ -284,6 +284,8 @@ typedef struct Thread_Local_Variables {
struct Scheme_Bucket_Table *place_local_modpath_table_;
struct Scheme_Hash_Table *opened_libs_;
struct mzrt_mutex *jit_lock_;
struct free_list_entry *free_list_;
int free_list_bucket_count_;
/*KPLAKE1*/
} Thread_Local_Variables;
@ -570,6 +572,8 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL;
#define place_local_modpath_table XOA (scheme_get_thread_local_variables()->place_local_modpath_table_)
#define opened_libs XOA (scheme_get_thread_local_variables()->opened_libs_)
#define jit_lock XOA (scheme_get_thread_local_variables()->jit_lock_)
#define free_list XOA (scheme_get_thread_local_variables()->free_list_)
#define free_list_bucket_count XOA (scheme_get_thread_local_variables()->free_list_bucket_count_)
/*KPLAKE2*/
/* **************************************** */

View File

@ -355,7 +355,6 @@ Scheme_Env *scheme_engine_instance_init() {
#ifndef DONT_USE_FOREIGN
scheme_init_foreign_globals();
#endif
scheme_init_salloc();
make_kernel_env();
#if defined(MZ_PRECISE_GC) && defined(MZ_USE_PLACES)

View File

@ -100,18 +100,8 @@ struct free_list_entry {
int count; /* number of items in `elems' */
};
SHARED_OK static struct free_list_entry *free_list;
SHARED_OK static int free_list_bucket_count;
#ifdef MZ_USE_PLACES
SHARED_OK static mzrt_mutex *free_list_mutex;
#endif
void scheme_init_salloc() {
#ifdef MZ_USE_PLACES
mzrt_mutex_create(&free_list_mutex);
#endif
}
THREAD_LOCAL_DECL(static struct free_list_entry *free_list;)
THREAD_LOCAL_DECL(static int free_list_bucket_count;)
void scheme_set_stack_base(void *base, int no_auto_statics)
{
@ -919,10 +909,6 @@ void *scheme_malloc_code(long size)
long size2, bucket, sz, page_size;
void *p, *pg, *prev;
# ifdef MZ_USE_PLACES
mzrt_mutex_lock(free_list_mutex);
# endif
if (size < CODE_HEADER_SIZE) {
/* ensure CODE_HEADER_SIZE alignment
and room for free-list pointers */
@ -986,10 +972,6 @@ void *scheme_malloc_code(long size)
LOG_CODE_MALLOC(0, printf("allocated %ld (->%ld / %ld)\n", size, size2, bucket));
}
# ifdef MZ_USE_PLACES
mzrt_mutex_unlock(free_list_mutex);
# endif
return p;
#else
return malloc(size); /* good luck! */
@ -1003,10 +985,6 @@ void scheme_free_code(void *p)
int per_page, n;
void *prev;
# ifdef MZ_USE_PLACES
mzrt_mutex_lock(free_list_mutex);
# endif
page_size = get_page_size();
size = *(long *)CODE_PAGE_OF(p);
@ -1079,9 +1057,6 @@ void scheme_free_code(void *p)
free_page(CODE_PAGE_OF(p), page_size);
}
}
# ifdef MZ_USE_PLACES
mzrt_mutex_unlock(free_list_mutex);
# endif
#else
free(p);

View File

@ -233,7 +233,6 @@ void scheme_init_dynamic_extension(Scheme_Env *env);
#ifndef NO_REGEXP_UTILS
extern void scheme_regexp_initialize(Scheme_Env *env);
#endif
void scheme_init_salloc(void);
void scheme_init_memtrace(Scheme_Env *env);
void scheme_init_paramz(Scheme_Env *env);
void scheme_init_parameterization();