mysql_ping 导致 SIGSEGV
mysql_ping causes SIGSEGV
我使用 c++ 和 mysql++ 库。我在每个线程上都有单独的 mysqlpp::Connection 对象。所有 mysqlpp 选项都是默认的(禁用 ReconnectOption)。每个线程都保持与 MariaDB 服务器的持久连接。在一系列 SQL 查询之前,我进行以下检查:
try
{
if (!connection.ping()) connection.connect(db_cfg.name.c_str(),
db_cfg.server.c_str(),
db_cfg.user.c_str(),
db_cfg.password.c_str(),
db_cfg.port);
}
此代码很少产生以下 SIGSEGV:
#0 0x00007fe0a625eb46 in ?? () from /usr/lib/x86_64-linux- gnu/libmysqlclient.so.20
#1 0x00007fe0a6251b26 in mysql_ping () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
#2 0x00007fe0ab6773b1 in mysqlpp::Connection::ping() () from /usr/lib/libmysqlpp.so.3
我试图通过 运行 测试程序在无限循环中调用 ping/connect 来重现此错误。在执行过程中,我手动重启了 MariaDB 服务器。但是我没有成功复制。
您有任何解决方法吗?谢谢。
OS: Ubuntu 64 位
mysqlpp++ 是使用 libmariadbclient 而不是 libmysqldbclient 重建的。它解决了问题。
我使用 c++ 和 mysql++ 库。我在每个线程上都有单独的 mysqlpp::Connection 对象。所有 mysqlpp 选项都是默认的(禁用 ReconnectOption)。每个线程都保持与 MariaDB 服务器的持久连接。在一系列 SQL 查询之前,我进行以下检查:
try
{
if (!connection.ping()) connection.connect(db_cfg.name.c_str(),
db_cfg.server.c_str(),
db_cfg.user.c_str(),
db_cfg.password.c_str(),
db_cfg.port);
}
此代码很少产生以下 SIGSEGV:
#0 0x00007fe0a625eb46 in ?? () from /usr/lib/x86_64-linux- gnu/libmysqlclient.so.20
#1 0x00007fe0a6251b26 in mysql_ping () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
#2 0x00007fe0ab6773b1 in mysqlpp::Connection::ping() () from /usr/lib/libmysqlpp.so.3
我试图通过 运行 测试程序在无限循环中调用 ping/connect 来重现此错误。在执行过程中,我手动重启了 MariaDB 服务器。但是我没有成功复制。 您有任何解决方法吗?谢谢。
OS: Ubuntu 64 位
mysqlpp++ 是使用 libmariadbclient 而不是 libmysqldbclient 重建的。它解决了问题。