Loading client/mysqltest.c +16 −10 Original line number Diff line number Diff line Loading @@ -207,7 +207,7 @@ static void die(const char* fmt, ...); static void init_var_hash(); static byte* get_var_key(const byte* rec, uint* len, my_bool __attribute__((unused)) t); static VAR* var_init(const char* name, int name_len, const char* val, static VAR* var_init(VAR* v, const char* name, int name_len, const char* val, int val_len); static void var_free(void* v); Loading Loading @@ -529,7 +529,7 @@ static VAR* var_obtain(char* name, int len) VAR* v; if((v = (VAR*)hash_search(&var_hash, name, len))) return v; v = var_init(name, len, "", 0); v = var_init(0, name, len, "", 0); hash_insert(&var_hash, (byte*)v); return v; } Loading Loading @@ -678,6 +678,7 @@ int do_system(struct st_query* q) { char* p=q->first_argument; VAR v; var_init(&v, 0, 0, 0, 0); eval_expr(&v, p, 0); /* NULL terminated */ if (v.str_val_len) { Loading @@ -697,6 +698,7 @@ int do_echo(struct st_query* q) { char* p=q->first_argument; VAR v; var_init(&v,0,0,0,0); eval_expr(&v, p, 0); /* NULL terminated */ if (v.str_val_len) { Loading Loading @@ -1172,6 +1174,7 @@ int do_while(struct st_query* q) char* p=q->first_argument; const char* expr_start, *expr_end; VAR v; var_init(&v,0,0,0,0); if (cur_block == block_stack_end) die("Nesting too deeply"); if (!*block_ok) Loading Loading @@ -1837,29 +1840,32 @@ static byte* get_var_key(const byte* var, uint* len, return (byte*)key; } static VAR* var_init(const char* name, int name_len, const char* val, static VAR* var_init(VAR* v, const char* name, int name_len, const char* val, int val_len) { int val_alloc_len; VAR* tmp_var; if(!name_len) if(!name_len && name) name_len = strlen(name); if(!val_len) if(!val_len && val) val_len = strlen(val) ; val_alloc_len = val_len + 16; /* room to grow */ if(!(tmp_var = (VAR*)my_malloc(sizeof(*tmp_var) if(!(tmp_var=v) && !(tmp_var = (VAR*)my_malloc(sizeof(*tmp_var) + name_len, MYF(MY_WME)))) die("Out of memory"); tmp_var->name = (char*)tmp_var + sizeof(*tmp_var); tmp_var->name = (name) ? (char*)tmp_var + sizeof(*tmp_var) : 0; if(!(tmp_var->str_val = my_malloc(val_alloc_len, MYF(MY_WME)))) die("Out of memory"); memcpy(tmp_var->name, name, name_len); if(val) memcpy(tmp_var->str_val, val, val_len + 1); tmp_var->name_len = name_len; tmp_var->str_val_len = val_len; tmp_var->alloced_len = val_alloc_len; tmp_var->int_val = atoi(val); tmp_var->int_val = (val) ? atoi(val) : 0; tmp_var->int_dirty = 0; return tmp_var; } Loading @@ -1878,7 +1884,7 @@ static void var_from_env(const char* name, const char* def_val) if(!(tmp = getenv(name))) tmp = def_val; v = var_init(name, 0, tmp, 0); v = var_init(0, name, 0, tmp, 0); hash_insert(&var_hash, (byte*)v); } Loading sql/log.cc +11 −10 Original line number Diff line number Diff line Loading @@ -514,16 +514,18 @@ bool MYSQL_LOG::is_active(const char* log_file_name) return inited && !strcmp(log_file_name, this->log_file_name); } void MYSQL_LOG::new_file() void MYSQL_LOG::new_file(bool inside_mutex) { // only rotate open logs that are marked non-rotatable // (binlog with constant name are non-rotatable) if (is_open() && ! no_rotate) { char new_name[FN_REFLEN], *old_name=name; if (!inside_mutex) VOID(pthread_mutex_lock(&LOCK_log)); if (generate_new_name(new_name, name)) { if (!inside_mutex) VOID(pthread_mutex_unlock(&LOCK_log)); return; // Something went wrong } Loading Loading @@ -551,6 +553,7 @@ void MYSQL_LOG::new_file() my_free(old_name,MYF(0)); last_time=query_start=0; write_error=0; if (!inside_mutex) VOID(pthread_mutex_unlock(&LOCK_log)); } } Loading Loading @@ -729,9 +732,9 @@ bool MYSQL_LOG::write(Query_log_event* event_info) if (file == &log_file) VOID(pthread_cond_broadcast(&COND_binlog_update)); } VOID(pthread_mutex_unlock(&LOCK_log)); if(should_rotate) new_file(); new_file(1); // inside mutex VOID(pthread_mutex_unlock(&LOCK_log)); return error; } Loading Loading @@ -817,12 +820,10 @@ bool MYSQL_LOG::write(Load_log_event* event_info) VOID(pthread_cond_broadcast(&COND_binlog_update)); } } if(should_rotate) new_file(1); // inside mutex VOID(pthread_mutex_unlock(&LOCK_log)); } if(should_rotate) new_file(); return error; } Loading sql/mysqld.cc +7 −0 Original line number Diff line number Diff line Loading @@ -1498,6 +1498,13 @@ static void open_log(MYSQL_LOG *log, const char *hostname, strmov(strcend(tmp,'.'),extension); opt_name=tmp; } // get rid of extention if the log is binary to avoid problems if (type == LOG_BIN) { char* p = strrchr(opt_name, FN_EXTCHAR); if (p) *p = 0; } log->open(opt_name,type); } Loading sql/sql_class.h +1 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ class MYSQL_LOG { void init(enum_log_type log_type_arg); void open(const char *log_name,enum_log_type log_type, const char *new_name=0); void new_file(void); void new_file(bool inside_mutex=0); bool open_index(int options); void close_index(); bool write(THD *thd, enum enum_server_command command,const char *format,...); Loading Loading
client/mysqltest.c +16 −10 Original line number Diff line number Diff line Loading @@ -207,7 +207,7 @@ static void die(const char* fmt, ...); static void init_var_hash(); static byte* get_var_key(const byte* rec, uint* len, my_bool __attribute__((unused)) t); static VAR* var_init(const char* name, int name_len, const char* val, static VAR* var_init(VAR* v, const char* name, int name_len, const char* val, int val_len); static void var_free(void* v); Loading Loading @@ -529,7 +529,7 @@ static VAR* var_obtain(char* name, int len) VAR* v; if((v = (VAR*)hash_search(&var_hash, name, len))) return v; v = var_init(name, len, "", 0); v = var_init(0, name, len, "", 0); hash_insert(&var_hash, (byte*)v); return v; } Loading Loading @@ -678,6 +678,7 @@ int do_system(struct st_query* q) { char* p=q->first_argument; VAR v; var_init(&v, 0, 0, 0, 0); eval_expr(&v, p, 0); /* NULL terminated */ if (v.str_val_len) { Loading @@ -697,6 +698,7 @@ int do_echo(struct st_query* q) { char* p=q->first_argument; VAR v; var_init(&v,0,0,0,0); eval_expr(&v, p, 0); /* NULL terminated */ if (v.str_val_len) { Loading Loading @@ -1172,6 +1174,7 @@ int do_while(struct st_query* q) char* p=q->first_argument; const char* expr_start, *expr_end; VAR v; var_init(&v,0,0,0,0); if (cur_block == block_stack_end) die("Nesting too deeply"); if (!*block_ok) Loading Loading @@ -1837,29 +1840,32 @@ static byte* get_var_key(const byte* var, uint* len, return (byte*)key; } static VAR* var_init(const char* name, int name_len, const char* val, static VAR* var_init(VAR* v, const char* name, int name_len, const char* val, int val_len) { int val_alloc_len; VAR* tmp_var; if(!name_len) if(!name_len && name) name_len = strlen(name); if(!val_len) if(!val_len && val) val_len = strlen(val) ; val_alloc_len = val_len + 16; /* room to grow */ if(!(tmp_var = (VAR*)my_malloc(sizeof(*tmp_var) if(!(tmp_var=v) && !(tmp_var = (VAR*)my_malloc(sizeof(*tmp_var) + name_len, MYF(MY_WME)))) die("Out of memory"); tmp_var->name = (char*)tmp_var + sizeof(*tmp_var); tmp_var->name = (name) ? (char*)tmp_var + sizeof(*tmp_var) : 0; if(!(tmp_var->str_val = my_malloc(val_alloc_len, MYF(MY_WME)))) die("Out of memory"); memcpy(tmp_var->name, name, name_len); if(val) memcpy(tmp_var->str_val, val, val_len + 1); tmp_var->name_len = name_len; tmp_var->str_val_len = val_len; tmp_var->alloced_len = val_alloc_len; tmp_var->int_val = atoi(val); tmp_var->int_val = (val) ? atoi(val) : 0; tmp_var->int_dirty = 0; return tmp_var; } Loading @@ -1878,7 +1884,7 @@ static void var_from_env(const char* name, const char* def_val) if(!(tmp = getenv(name))) tmp = def_val; v = var_init(name, 0, tmp, 0); v = var_init(0, name, 0, tmp, 0); hash_insert(&var_hash, (byte*)v); } Loading
sql/log.cc +11 −10 Original line number Diff line number Diff line Loading @@ -514,16 +514,18 @@ bool MYSQL_LOG::is_active(const char* log_file_name) return inited && !strcmp(log_file_name, this->log_file_name); } void MYSQL_LOG::new_file() void MYSQL_LOG::new_file(bool inside_mutex) { // only rotate open logs that are marked non-rotatable // (binlog with constant name are non-rotatable) if (is_open() && ! no_rotate) { char new_name[FN_REFLEN], *old_name=name; if (!inside_mutex) VOID(pthread_mutex_lock(&LOCK_log)); if (generate_new_name(new_name, name)) { if (!inside_mutex) VOID(pthread_mutex_unlock(&LOCK_log)); return; // Something went wrong } Loading Loading @@ -551,6 +553,7 @@ void MYSQL_LOG::new_file() my_free(old_name,MYF(0)); last_time=query_start=0; write_error=0; if (!inside_mutex) VOID(pthread_mutex_unlock(&LOCK_log)); } } Loading Loading @@ -729,9 +732,9 @@ bool MYSQL_LOG::write(Query_log_event* event_info) if (file == &log_file) VOID(pthread_cond_broadcast(&COND_binlog_update)); } VOID(pthread_mutex_unlock(&LOCK_log)); if(should_rotate) new_file(); new_file(1); // inside mutex VOID(pthread_mutex_unlock(&LOCK_log)); return error; } Loading Loading @@ -817,12 +820,10 @@ bool MYSQL_LOG::write(Load_log_event* event_info) VOID(pthread_cond_broadcast(&COND_binlog_update)); } } if(should_rotate) new_file(1); // inside mutex VOID(pthread_mutex_unlock(&LOCK_log)); } if(should_rotate) new_file(); return error; } Loading
sql/mysqld.cc +7 −0 Original line number Diff line number Diff line Loading @@ -1498,6 +1498,13 @@ static void open_log(MYSQL_LOG *log, const char *hostname, strmov(strcend(tmp,'.'),extension); opt_name=tmp; } // get rid of extention if the log is binary to avoid problems if (type == LOG_BIN) { char* p = strrchr(opt_name, FN_EXTCHAR); if (p) *p = 0; } log->open(opt_name,type); } Loading
sql/sql_class.h +1 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ class MYSQL_LOG { void init(enum_log_type log_type_arg); void open(const char *log_name,enum_log_type log_type, const char *new_name=0); void new_file(void); void new_file(bool inside_mutex=0); bool open_index(int options); void close_index(); bool write(THD *thd, enum enum_server_command command,const char *format,...); Loading