mysql_ping导致SIGSEGV

时间:2017-06-07 16:19:14

标签: c++ mysql++ libmysql

我使用的是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服务器。但是我没有成功复制。 你有任何想法如何解决它?谢谢。

操作系统:Ubuntu 64位

1 个答案:

答案 0 :(得分:0)

mysqlpp ++是使用libmariadbclient而不是libmysqldbclient重建的。它解决了这个问题。