From 3bf64fa72dfbe2cbfa39355422cdb185abb2f0af Mon Sep 17 00:00:00 2001 From: zhengshuxin Date: Thu, 3 Nov 2016 11:19:11 +0800 Subject: [PATCH] fixed bugs in db pool for setting charset. --- Makefile | 2 +- changes.txt | 1 + lib_acl/src/init/acl_init.c | 2 +- lib_acl_cpp/changes.txt | 5 +++++ lib_acl_cpp/include/acl_cpp/db/db_pool.hpp | 8 +------- lib_acl_cpp/include/acl_cpp/db/mysql_pool.hpp | 3 --- lib_acl_cpp/include/acl_cpp/db/sqlite_pool.hpp | 3 --- lib_acl_cpp/src/db/db_mysql.cpp | 2 -- lib_acl_cpp/src/db/db_pool.cpp | 5 +---- lib_acl_cpp/src/db/mysql_pool.cpp | 6 ------ lib_acl_cpp/src/db/sqlite_pool.cpp | 10 ---------- 11 files changed, 10 insertions(+), 37 deletions(-) diff --git a/Makefile b/Makefile index 624583e80..b1dd4a414 100644 --- a/Makefile +++ b/Makefile @@ -81,7 +81,7 @@ endif ############################################################################## .PHONY = check help all_lib all samples all clean install uninstall uninstall_all build_bin build_src build_one -VERSION = 3.2.2 +VERSION = 3.2.2_2 help: @(echo "usage: make help|all|all_lib|all_samples|clean|install|uninstall|uninstall_all|build_bin|build_src|build_one") diff --git a/changes.txt b/changes.txt index e7752201f..a0b16dc2f 100644 --- a/changes.txt +++ b/changes.txt @@ -1,5 +1,6 @@ 修改历史列表: ------------------------------------------------------------------------ +101) 2016.11.3 --- acl 3.2.2.2 版本发布! 100) 2016.11.2 --- acl 3.2.2.1 版本发布! 99) 2016.11.1 --- acl 3.2.2 版本发布! 98) 2016.9.7 --- acl 3.2.1 版本发布! diff --git a/lib_acl/src/init/acl_init.c b/lib_acl/src/init/acl_init.c index e77489647..ddfd02ec8 100644 --- a/lib_acl/src/init/acl_init.c +++ b/lib_acl/src/init/acl_init.c @@ -24,7 +24,7 @@ #include "init.h" -static char *version = "acl_3.2.2"; +static char *version = "acl_3.2.2_2"; const char *acl_version(void) { diff --git a/lib_acl_cpp/changes.txt b/lib_acl_cpp/changes.txt index 713851cf1..7044dc6c6 100644 --- a/lib_acl_cpp/changes.txt +++ b/lib_acl_cpp/changes.txt @@ -1,6 +1,11 @@ 修改历史列表: ----------------------------------------------------------------------- +449) 2016.11.2 +449.1) bugfix: db_pool.cpp 中的方法 peek_open 禁止动态设置字符集,因为可能会引起 +线程冲突问题,如果想要设置字符集,必须在 db_mysql/db_sqlite 的构造中指定;对于 db_mysql +类,当使用 mysql_conf 类进行初始化 db_mysql 构造时,在 mysql_conf 提前设定字符集 + 448) 2016.11.2 448.1) bugfix: db_mysql.cpp 中类 db_mysql 的构造函数没有针对 charset_ 初始化 有可能会造成崩溃 diff --git a/lib_acl_cpp/include/acl_cpp/db/db_pool.hpp b/lib_acl_cpp/include/acl_cpp/db/db_pool.hpp index b6c4ab108..8fca56082 100644 --- a/lib_acl_cpp/include/acl_cpp/db/db_pool.hpp +++ b/lib_acl_cpp/include/acl_cpp/db/db_pool.hpp @@ -26,10 +26,9 @@ class ACL_CPP_API db_pool : public connect_pool * 显式地再调用 db_handle::open 过程; * 用完后必须调用 db_pool->put(db_handle*) 将连接归还至数据库连接池, * 由该函数获得的连接句柄不能 delete,否则会造成连接池的内部计数器出错 - * @param charset {const char*} 打开数据库时采用的字符集 * @return {db_handle*} 数据库连接对象,返回空表示出错 */ - db_handle* peek_open(const char* charset = NULL); + db_handle* peek_open(); /** * 获得当前数据库连接池的最大连接数限制 @@ -57,11 +56,6 @@ class ACL_CPP_API db_pool : public connect_pool { set_idle_ttl(ttl); } - -protected: - // 虚函数,子类根据需要设置字符集,当 peek_open 被调用时,此函数 - // 会先被调用用来设置数据库连接的字符集 - virtual void set_charset(const char*) {} }; class ACL_CPP_API db_guard : public connect_guard diff --git a/lib_acl_cpp/include/acl_cpp/db/mysql_pool.hpp b/lib_acl_cpp/include/acl_cpp/db/mysql_pool.hpp index f73a103a7..bbf599e31 100644 --- a/lib_acl_cpp/include/acl_cpp/db/mysql_pool.hpp +++ b/lib_acl_cpp/include/acl_cpp/db/mysql_pool.hpp @@ -41,9 +41,6 @@ class ACL_CPP_API mysql_pool : public db_pool // 基类 connect_pool 纯虚函数:创建数据库连接句柄 connect_client* create_connect(); - //@override - void set_charset(const char* charset); - private: mysql_conf* conf_; }; diff --git a/lib_acl_cpp/include/acl_cpp/db/sqlite_pool.hpp b/lib_acl_cpp/include/acl_cpp/db/sqlite_pool.hpp index 50b1e558b..f6d99c49a 100644 --- a/lib_acl_cpp/include/acl_cpp/db/sqlite_pool.hpp +++ b/lib_acl_cpp/include/acl_cpp/db/sqlite_pool.hpp @@ -23,9 +23,6 @@ class ACL_CPP_API sqlite_pool : public db_pool // 基类 connect_pool 纯虚函数:创建数据库连接句柄 connect_client* create_connect(); - //@override - void set_charset(const char* charset); - private: // sqlite 数据文件名 char* dbfile_; diff --git a/lib_acl_cpp/src/db/db_mysql.cpp b/lib_acl_cpp/src/db/db_mysql.cpp index c89552663..dd9c6eae9 100644 --- a/lib_acl_cpp/src/db/db_mysql.cpp +++ b/lib_acl_cpp/src/db/db_mysql.cpp @@ -379,8 +379,6 @@ void db_mysql::sane_mysql_init(const char* dbaddr, const char* dbname, if (charset && *charset) charset_ = charset; - else - charset_ = NULL; dbflags_ = dbflags; auto_commit_ = auto_commit; diff --git a/lib_acl_cpp/src/db/db_pool.cpp b/lib_acl_cpp/src/db/db_pool.cpp index 74f518065..d7af678bd 100644 --- a/lib_acl_cpp/src/db/db_pool.cpp +++ b/lib_acl_cpp/src/db/db_pool.cpp @@ -13,11 +13,8 @@ db_pool::db_pool(const char* dbaddr, size_t count, size_t idx /* = 0 */) { } -db_handle* db_pool::peek_open(const char* charset /* = NULL */) +db_handle* db_pool::peek_open(void) { - if (charset) - set_charset(charset); - db_handle* conn = (db_handle*) peek(); if (conn == NULL) logger_error("peek NULL"); diff --git a/lib_acl_cpp/src/db/mysql_pool.cpp b/lib_acl_cpp/src/db/mysql_pool.cpp index 4e3462399..c7336bf0d 100644 --- a/lib_acl_cpp/src/db/mysql_pool.cpp +++ b/lib_acl_cpp/src/db/mysql_pool.cpp @@ -51,10 +51,4 @@ connect_client* mysql_pool::create_connect() return NEW db_mysql(*conf_); } -void mysql_pool::set_charset(const char* charset) -{ - if (charset) - conf_->set_charset(charset); -} - } // namespace acl diff --git a/lib_acl_cpp/src/db/sqlite_pool.cpp b/lib_acl_cpp/src/db/sqlite_pool.cpp index 1e95baef3..fac6d1938 100644 --- a/lib_acl_cpp/src/db/sqlite_pool.cpp +++ b/lib_acl_cpp/src/db/sqlite_pool.cpp @@ -33,14 +33,4 @@ connect_client* sqlite_pool::create_connect() return NEW db_sqlite(dbfile_, charset_); } -void sqlite_pool::set_charset(const char* charset) -{ - if (charset == NULL || *charset == 0) - return; - - if (charset_) - acl_myfree(charset_); - charset_ = acl_mystrdup(charset); -} - } // namespace acl