- 論壇徽章:
- 0
|
最近做的項(xiàng)目數(shù)據(jù)庫連接用的mysql++,
代碼如下
try {
mysqlpp::ScopedConnection cp(*mPool,true);
} catch {
....
}
有時程序會掛在ScopedConnection構(gòu)造函數(shù)中,棧如下:
#1 0x00f38d2c in mysqlpp::Connection::~Connection() () from /usr/local/lib/libmysqlpp.so.3
#2 0x00f38dd2 in mysqlpp::Connection::~Connection() () from /usr/local/lib/libmysqlpp.so.3
#3 0x0806e44a in GameServerMysqlConnectPool::destroy (this=0xa9d4088, cp=0xaf17400) at ../game/GameServerMysqlConnectPool.h:75
#4 0x00f3bc1e in mysqlpp::ConnectionPool::remove(std::_List_iterator<mysqlpp::ConnectionPool::ConnectionInfo> const& ()
from /usr/local/lib/libmysqlpp.so.3
#5 0x00f3bca9 in mysqlpp::ConnectionPool::remove_old_connections() () from /usr/local/lib/libmysqlpp.so.3
#6 0x00f3bf40 in mysqlpp::ConnectionPool::grab() () from /usr/local/lib/libmysqlpp.so.3
#7 0x0806e227 in GameServerMysqlConnectPool::grab (this=0xa9d408 at ../game/GameServerMysqlConnectPool.h:48
#8 0x00f3bda4 in mysqlpp::ConnectionPool::safe_grab() () from /usr/local/lib/libmysqlpp.so.3
#9 0x00f51e10 in mysqlpp::ScopedConnection::ScopedConnection(mysqlpp::ConnectionPool&, bool) ()
from /usr/local/lib/libmysqlpp.so.3
#3 0x0806e44a in GameServerMysqlConnectPool::destroy (this=0xa9d4088, cp=0xaf17400) at ../game/GameServerMysqlConnectPool.h:75
virtual void destroy(mysqlpp::Connection* cp)
{
delete cp;
}
一次delete 執(zhí)行了2次析構(gòu)函數(shù),兩次析構(gòu)函數(shù)的地址還是不同的。真是怪了。
程序很難重現(xiàn),有沒有同學(xué)遇到過這種情況;蛘邘兔忉屜麓蟾攀裁辞闆r下會出現(xiàn)2次析構(gòu)。
代碼是在多線程中調(diào)用的?墒俏铱磎ysql++源碼中, mysqlpp::ConnectionPool::grab()是加鎖的,真是郁悶了。
|
|