1
0
mirror of https://github.com/coturn/coturn.git synced 2025-10-24 12:31:00 +02:00

Merge pull request #367 from shu-mutou/disconnect-db

Disconnect database gracefully
This commit is contained in:
Mészáros Mihály 2019-05-20 11:10:30 +02:00 committed by GitHub
commit dfa95e6af5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 73 additions and 6 deletions

View File

@ -1351,6 +1351,15 @@ static int mongo_list_admin_users(int no_print)
return ret; return ret;
} }
static void mongo_disconnect(void) {
MONGO * mongoconnection = (MONGO *) pthread_getspecific(connection_key);
if (mongoconnection) {
MongoFree(mongoconnection);
mongoconnection = NULL;
}
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "MongoDB connection was closed.\n");
}
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
static const turn_dbdriver_t driver = { static const turn_dbdriver_t driver = {
@ -1378,7 +1387,8 @@ static const turn_dbdriver_t driver = {
&mongo_get_admin_user, &mongo_get_admin_user,
&mongo_set_admin_user, &mongo_set_admin_user,
&mongo_del_admin_user, &mongo_del_admin_user,
&mongo_list_admin_users &mongo_list_admin_users,
&mongo_disconnect
}; };
const turn_dbdriver_t * get_mongo_dbdriver(void) { const turn_dbdriver_t * get_mongo_dbdriver(void) {

View File

@ -1261,6 +1261,15 @@ static int mysql_list_admin_users(int no_print)
return ret; return ret;
} }
static void mysql_disconnect(void) {
MYSQL *mydbconnection = (MYSQL*)pthread_getspecific(connection_key);
if (mydbconnection) {
mysql_close(mydbconnection);
mydbconnection=NULL;
}
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "MySQL connection was closed.\n");
}
////////////////////////////////////////////////////// //////////////////////////////////////////////////////
static const turn_dbdriver_t driver = { static const turn_dbdriver_t driver = {
@ -1288,7 +1297,8 @@ static const turn_dbdriver_t driver = {
&mysql_get_admin_user, &mysql_get_admin_user,
&mysql_set_admin_user, &mysql_set_admin_user,
&mysql_del_admin_user, &mysql_del_admin_user,
&mysql_list_admin_users &mysql_list_admin_users,
&mysql_disconnect
}; };
const turn_dbdriver_t * get_mysql_dbdriver(void) { const turn_dbdriver_t * get_mysql_dbdriver(void) {

View File

@ -949,6 +949,15 @@ static int pgsql_list_admin_users(int no_print)
return ret; return ret;
} }
static void pgsql_disconnect(void) {
PGconn *pqdbconnection = (PGconn*)pthread_getspecific(connection_key);
if (pqdbconnection) {
PQfinish(pqdbconnection);
pqdbconnection=NULL;
}
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "PostgreSQL connection was closed.\n");
}
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
static const turn_dbdriver_t driver = { static const turn_dbdriver_t driver = {
@ -976,7 +985,8 @@ static const turn_dbdriver_t driver = {
&pgsql_get_admin_user, &pgsql_get_admin_user,
&pgsql_set_admin_user, &pgsql_set_admin_user,
&pgsql_del_admin_user, &pgsql_del_admin_user,
&pgsql_list_admin_users &pgsql_list_admin_users,
&pgsql_disconnect
}; };
const turn_dbdriver_t * get_pgsql_dbdriver(void) { const turn_dbdriver_t * get_pgsql_dbdriver(void) {

View File

@ -1347,6 +1347,15 @@ static int redis_list_admin_users(int no_print)
return ret; return ret;
} }
static void redis_disconnect(void) {
redisContext *redisconnection = (redisContext*)pthread_getspecific(connection_key);
if (redisconnection) {
redisFree(redisconnection);
redisconnection = NULL;
}
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Redis connection was closed.\n");
}
////////////////////////////////////////////////////// //////////////////////////////////////////////////////
static const turn_dbdriver_t driver = { static const turn_dbdriver_t driver = {
@ -1374,7 +1383,8 @@ static const turn_dbdriver_t driver = {
&redis_get_admin_user, &redis_get_admin_user,
&redis_set_admin_user, &redis_set_admin_user,
&redis_del_admin_user, &redis_del_admin_user,
&redis_list_admin_users &redis_list_admin_users,
&redis_disconnect
}; };
const turn_dbdriver_t * get_redis_dbdriver(void) { const turn_dbdriver_t * get_redis_dbdriver(void) {

View File

@ -1294,6 +1294,15 @@ static int sqlite_list_admin_users(int no_print)
return ret; return ret;
} }
static void *sqlite_disconnect(void) {
sqlite3 *sqliteconnection = (sqlite3 *)pthread_getspecific(connection_key);
if (sqliteconnection) {
sqlite3_close(sqliteconnection);
sqliteconnection=NULL;
}
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "SQLite connection was closed.\n");
}
/////////////////////////////////////////////////////// ///////////////////////////////////////////////////////
static const turn_dbdriver_t driver = { static const turn_dbdriver_t driver = {
@ -1321,7 +1330,8 @@ static const turn_dbdriver_t driver = {
&sqlite_get_admin_user, &sqlite_get_admin_user,
&sqlite_set_admin_user, &sqlite_set_admin_user,
&sqlite_del_admin_user, &sqlite_del_admin_user,
&sqlite_list_admin_users &sqlite_list_admin_users,
&sqlite_disconnect
}; };
////////////////////////////////////////////////// //////////////////////////////////////////////////

View File

@ -73,6 +73,7 @@ typedef struct _turn_dbdriver_t {
int (*set_admin_user)(const uint8_t *usname, const uint8_t *realm, const password_t pwd); int (*set_admin_user)(const uint8_t *usname, const uint8_t *realm, const password_t pwd);
int (*del_admin_user)(const uint8_t *usname); int (*del_admin_user)(const uint8_t *usname);
int (*list_admin_users)(int no_print); int (*list_admin_users)(int no_print);
void (*disconnect)(void);
} turn_dbdriver_t; } turn_dbdriver_t;
/////////// USER DB CHECK ////////////////// /////////// USER DB CHECK //////////////////

View File

@ -29,6 +29,7 @@
*/ */
#include "mainrelay.h" #include "mainrelay.h"
#include "dbdrivers/dbdriver.h"
#if (defined LIBRESSL_VERSION_NUMBER && OPENSSL_VERSION_NUMBER == 0x20000000L) #if (defined LIBRESSL_VERSION_NUMBER && OPENSSL_VERSION_NUMBER == 0x20000000L)
#undef OPENSSL_VERSION_NUMBER #undef OPENSSL_VERSION_NUMBER
@ -1690,6 +1691,15 @@ static void read_config_file(int argc, char **argv, int pass)
} }
} }
static int disconnect_database(void)
{
const turn_dbdriver_t * dbd = get_dbdriver();
if (dbd && dbd->disconnect) {
dbd->disconnect();
}
return 0;
}
static int adminmain(int argc, char **argv) static int adminmain(int argc, char **argv)
{ {
int c = 0; int c = 0;
@ -1914,7 +1924,11 @@ static int adminmain(int argc, char **argv)
exit(-1); exit(-1);
} }
return adminuser(user, realm, pwd, secret, origin, ct, &po, is_admin); int result = adminuser(user, realm, pwd, secret, origin, ct, &po, is_admin);
disconnect_database();
return result;
} }
static void print_features(unsigned long mfn) static void print_features(unsigned long mfn)
@ -2421,6 +2435,8 @@ int main(int argc, char **argv)
run_listener_server(&(turn_params.listener)); run_listener_server(&(turn_params.listener));
disconnect_database();
return 0; return 0;
} }