[Interest] QSqlDatabase segfault - me or Qt5?

Mark Summerfield list at qtrac.plus.com
Fri Mar 1 15:23:55 CET 2013


Hi,

I've got a release version of Qt that's giving this on 64-bit linux:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7bb35ea in QSqlDatabase::close() ()
from /home/mark/opt/qt501/lib/libQt5Sql.so.5 (gdb) bt
#0  0x00007ffff7bb35ea in QSqlDatabase::close() ()
from /home/mark/opt/qt501/lib/libQt5Sql.so.5 #1  0x00007ffff7bb475d in
QSqlDatabase::~QSqlDatabase() ()
from /home/mark/opt/qt501/lib/libQt5Sql.so.5 #2  0x00007ffff7bb723d in ??
() from /home/mark/opt/qt501/lib/libQt5Sql.so.5 #3  0x00007ffff73faa2d in
QHashData::free_helper(void (*)(QHashData::Node*)) ()
from /home/mark/opt/qt501/lib/libQt5Core.so.5 #4  0x00007ffff7bb6e1c in ??
() from /home/mark/opt/qt501/lib/libQt5Sql.so.5 #5  0x00007ffff664c612
in ?? () from /lib/libc.so.6 #6  0x00007ffff664c665 in exit ()
from /lib/libc.so.6 #7  0x00007ffff6634c94 in __libc_start_main ()
from /lib/libc.so.6 #8  0x0000000000404569 in _start ()

There's no mention of my own code.

I have a Database class which creates database connections using
QSqlDatabase::addDatabase(). I create a fresh m_cname (connection name)
for each addDatabase() and store it for use in the methods and in the
destructor:

void Database::~Database()
{
    if (QSqlDatabase::contains(m_cname)) {
        {
            QSqlDatabase db = QSqlDatabase::database(m_cname);
            db.close();
        }
        QSqlDatabase::removeDatabase(m_cname);
    }
}

Any suggestions as to what I'm doing wrong?

Thanks!

-- 
Mark Summerfield, Qtrac Ltd, www.qtrac.eu
    C++, Python, Qt, PyQt - training and consultancy
        "Programming in Go" - ISBN 0321774639
            http://www.qtrac.eu/gobook.html



More information about the Interest mailing list