diff options
Diffstat (limited to 'src/char_sql')
-rw-r--r-- | src/char_sql/char.c | 3 | ||||
-rw-r--r-- | src/char_sql/char.h | 1 | ||||
-rw-r--r-- | src/char_sql/inter.c | 41 |
3 files changed, 32 insertions, 13 deletions
diff --git a/src/char_sql/char.c b/src/char_sql/char.c index d71ea3483..f81f03cad 100644 --- a/src/char_sql/char.c +++ b/src/char_sql/char.c @@ -64,7 +64,6 @@ int save_log = 0; //Have the logs be off by default when converting #else int save_log = 1; int db_use_sqldbs; -int connection_ping_interval = 0; char login_db[256] = "login"; char login_db_account_id[32] = "account_id"; @@ -4033,8 +4032,6 @@ void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */ strcpy(item_db_db,w2); }else if(strcmpi(w1,"item_db2_db")==0){ strcpy(item_db2_db,w2); - } else if(strcmpi(w1,"connection_ping_interval")==0) { - connection_ping_interval = config_switch(w2); #endif //support the import command, just like any other config }else if(strcmpi(w1,"import")==0){ diff --git a/src/char_sql/char.h b/src/char_sql/char.h index 1ad48fc9b..4a95fd0f8 100644 --- a/src/char_sql/char.h +++ b/src/char_sql/char.h @@ -90,7 +90,6 @@ extern char party_db[256]; extern char pet_db[256]; extern int db_use_sqldbs; // added for sql item_db read for char server [Valaris] -extern int connection_ping_interval; extern char login_db_level[32]; extern char login_db_account_id[32]; diff --git a/src/char_sql/inter.c b/src/char_sql/inter.c index 326bd2ca1..052316e0a 100644 --- a/src/char_sql/inter.c +++ b/src/char_sql/inter.c @@ -297,10 +297,9 @@ int inter_log(char *fmt,...) return 0; } -/*====================================================== - * Does a mysql_ping to all connection handles. [Skotlex] - *------------------------------------------------------ - */ +/*============================================= + * Does a mysql_ping to all connection handles + *---------------------------------------------*/ int inter_sql_ping(int tid, unsigned int tick, int id, int data) { ShowInfo("Pinging SQL server to keep connection alive...\n"); @@ -309,6 +308,34 @@ int inter_sql_ping(int tid, unsigned int tick, int id, int data) mysql_ping(&lmysql_handle); return 0; } + + +int sql_ping_init(void) +{ + int connection_timeout, connection_ping_interval; + + // set a default value first + connection_timeout = 28800; // 8 hours + + // ask the mysql server for the timeout value + if (!mysql_query(&mysql_handle, "SHOW VARIABLES LIKE 'wait_timeout'") + && (sql_res = mysql_store_result(&mysql_handle)) != NULL) { + sql_row = mysql_fetch_row(sql_res); + if (sql_row) + connection_timeout = atoi(sql_row[1]); + if (connection_timeout < 60) + connection_timeout = 60; + mysql_free_result(sql_res); + } + + // establish keepalive + connection_ping_interval = connection_timeout - 30; // 30-second reserve + add_timer_func_list(inter_sql_ping, "inter_sql_ping"); + add_timer_interval(gettick() + connection_ping_interval*1000, inter_sql_ping, 0, 0, connection_ping_interval*1000); + + return 0; +} + #endif //TXT_SQL_CONVERT // initialize @@ -370,11 +397,7 @@ int inter_init_sql(const char *file) inter_homunculus_sql_init(); // albator inter_accreg_sql_init(); - if (connection_ping_interval) { - add_timer_func_list(inter_sql_ping, "inter_sql_ping"); - add_timer_interval(gettick()+connection_ping_interval*60*60*1000, - inter_sql_ping, 0, 0, connection_ping_interval*60*60*1000); - } + sql_ping_init(); #endif //TXT_SQL_CONVERT return 0; } |