- 论坛徽章:
- 0
|
隔壁mysql区没人理。。.
最近做的项目数据库连接用的mysql++,
代码如下
try {
mysqlpp::ScopedConnection cp(*mPool,true);
} catch {
....
}
有时程序会挂在ScopedConnection构造函数中,栈如下:
#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 执行了2次析构函数,两次析构函数的地址还是不同的。真是怪了。
程序很难重现,有没有同学遇到过这种情况。或者帮忙解释下大概什么情况下会出现2次析构。
代码是在多线程中调用的。可是我看mysql++源码中, mysqlpp::ConnectionPool::grab()是加锁的,真是郁闷了。
|
|