THREAD_LOCAL Logger

svn: r17016
This commit is contained in:
Kevin Tew 2009-11-23 21:34:29 +00:00
parent 958e3418aa
commit 2599cf95f8
5 changed files with 30 additions and 28 deletions

View File

@ -216,6 +216,7 @@ typedef struct Thread_Local_Variables {
unsigned long current_total_allocation_;
struct gmp_tmp_stack gmp_tmp_xxx_;
struct gmp_tmp_stack *gmp_tmp_current_;
struct Scheme_Logger *scheme_main_logger_;
} Thread_Local_Variables;
#if defined(IMPLEMENT_THREAD_LOCAL_VIA_PTHREADS)
@ -398,6 +399,7 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL;
#define current_total_allocation XOA (scheme_get_thread_local_variables()->current_total_allocation_)
#define gmp_tmp_xxx XOA (scheme_get_thread_local_variables()->gmp_tmp_xxx_)
#define gmp_tmp_current XOA (scheme_get_thread_local_variables()->gmp_tmp_current_)
#define scheme_main_logger XOA (scheme_get_thread_local_variables()->scheme_main_logger_)
/* **************************************** */

View File

@ -439,6 +439,7 @@ static Scheme_Env *place_instance_init_post_kernel() {
}
scheme_init_error_escape_proc(NULL);
scheme_init_print_buffers_places();
scheme_init_logger();
scheme_init_eval_places();
scheme_init_regexp_places();
scheme_init_stx_places();
@ -453,6 +454,7 @@ static Scheme_Env *place_instance_init_post_kernel() {
scheme_init_port_config();
scheme_init_port_fun_config();
scheme_init_error_config();
scheme_init_logger_config();
#ifndef NO_SCHEME_EXNS
scheme_init_exn_config();
#endif

View File

@ -50,8 +50,7 @@ void (*scheme_console_output)(char *str, long len);
static int init_syslog_level = INIT_SYSLOG_LEVEL;
static int init_stderr_level = SCHEME_LOG_ERROR;
Scheme_Logger *scheme_main_logger;
static void init_logger_config();
THREAD_LOCAL_DECL(static Scheme_Logger *scheme_main_logger);
/* readonly globals */
const char *scheme_compile_stx_string = "compile";
@ -589,7 +588,13 @@ void scheme_init_error(Scheme_Env *env)
scheme_add_evt(scheme_log_reader_type, (Scheme_Ready_Fun)log_reader_get, NULL, NULL, 1);
REGISTER_SO(scheme_def_exit_proc);
REGISTER_SO(default_display_handler);
REGISTER_SO(emergency_display_handler);
scheme_def_exit_proc = scheme_make_prim_w_arity(def_exit_handler_proc, "default-exit-handler", 1, 1);
default_display_handler = scheme_make_prim_w_arity(def_error_display_proc, "default-error-display-handler", 2, 2);
emergency_display_handler = scheme_make_prim_w_arity(emergency_error_display_proc, "emergency-error-display-handler", 2, 2);
REGISTER_SO(def_err_val_proc);
def_err_val_proc = scheme_make_prim_w_arity(def_error_value_string_proc, "default-error-value->string-handler", 2, 2);
@ -605,14 +610,6 @@ void scheme_init_error(Scheme_Env *env)
info_symbol = scheme_intern_symbol("info");
debug_symbol = scheme_intern_symbol("debug");
{
REGISTER_SO(scheme_main_logger);
scheme_main_logger = make_a_logger(NULL, NULL);
scheme_main_logger->syslog_level = init_syslog_level;
scheme_main_logger->stderr_level = init_stderr_level;
}
init_logger_config();
REGISTER_SO(arity_property);
{
Scheme_Object *guard;
@ -625,27 +622,29 @@ void scheme_init_error(Scheme_Env *env)
scheme_init_error_config();
}
static void init_logger_config()
void scheme_init_logger()
{
scheme_set_root_param(MZCONFIG_LOGGER, (Scheme_Object *)scheme_main_logger);
REGISTER_SO(scheme_main_logger);
scheme_main_logger = make_a_logger(NULL, NULL);
scheme_main_logger->syslog_level = init_syslog_level;
scheme_main_logger->stderr_level = init_stderr_level;
}
Scheme_Logger *scheme_get_main_logger() {
return scheme_main_logger;
}
void scheme_init_error_config(void)
{
init_logger_config();
scheme_set_root_param(MZCONFIG_EXIT_HANDLER, scheme_def_exit_proc);
REGISTER_SO(default_display_handler);
REGISTER_SO(emergency_display_handler);
default_display_handler = scheme_make_prim_w_arity(def_error_display_proc, "default-error-display-handler", 2, 2);
emergency_display_handler = scheme_make_prim_w_arity(emergency_error_display_proc, "emergency-error-display-handler", 2, 2);
scheme_set_root_param(MZCONFIG_ERROR_DISPLAY_HANDLER, default_display_handler);
scheme_set_root_param(MZCONFIG_ERROR_PRINT_VALUE_HANDLER, def_err_val_proc);
}
void scheme_init_logger_config() {
scheme_set_root_param(MZCONFIG_LOGGER, (Scheme_Object *)scheme_main_logger);
}
static void
scheme_inescapeable_error(const char *a, const char *b)
{

View File

@ -235,6 +235,9 @@ void scheme_init_fun_places(void);
void scheme_init_sema_places(void);
void scheme_init_gmp_places(void);
void scheme_init_print_global_constants(void);
void scheme_init_logger(void);
Scheme_Logger *scheme_get_main_logger(void);
void scheme_init_logger_config(void);
void register_network_evts();
@ -2944,8 +2947,6 @@ typedef struct Scheme_Log_Reader {
Scheme_Object *head, *tail;
} Scheme_Log_Reader;
extern Scheme_Logger *scheme_main_logger;
char *scheme_optimize_context_to_string(Scheme_Object *context);
void scheme_write_proc_context(Scheme_Object *port, int print_width,

View File

@ -7408,7 +7408,8 @@ static void done_with_GC()
#ifdef MZ_PRECISE_GC
static void inform_GC(int major_gc, long pre_used, long post_used)
{
if (scheme_main_logger) {
Scheme_Logger *logger = scheme_get_main_logger();
if (logger) {
/* Don't use scheme_log(), because it wants to allocate a buffer
based on the max value-print width, and we may not be at a
point where parameters are available. */
@ -7422,10 +7423,7 @@ static void inform_GC(int major_gc, long pre_used, long post_used)
end_this_gc_time - start_this_gc_time);
buflen = strlen(buf);
scheme_log_message(scheme_main_logger,
SCHEME_LOG_DEBUG,
buf, buflen,
NULL);
scheme_log_message(logger, SCHEME_LOG_DEBUG, buf, buflen, NULL);
}
}