reconnect failing in 3.51.12
"John Calcote" <[email protected]>
| Newsgroups | gmane.comp.db.mysql.odbc |
|---|---|
| Message-ID | <[email protected]> |
I've got a linux daemon that logs to myodbc 3.51.12 through unixODBC driver manager. The first time my program receives a command it establishes an entire ODBC environment via the following (abbreviated) code:
int connect()
{
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hsql);
SQLSetEnvAttr(hsql, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, hsql, &hdbc);
SQLConnect(hdbc, (SQLCHAR*)dsn, SQL_NTS, (SQLCHAR*)user, SQL_NTS, (SQLCHAR*)passwd, SQL_NTS);
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
SQLPrepare(hstmt, primary_stmt, SQL_NTS);
for (i = 0; i < elemcount(pa); i++)
SQLBindParameter(hstmt, j++, SQL_PARAM_INPUT, pa[i].c_type, pa[i].s_type, pa[i].csize, 0, pa[i].pvp, 0, &ind[i]);
}
void disconnect()
{
if (hstmt != 0)
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
if (hdbc != 0)
{
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
if (hsql != 0)
SQLFreeHandle(SQL_HANDLE_ENV, hsql);
hstmt = hdbc = hsql = 0;
}
Of course, I check all of the error returns in the real code. The daemon monitors for intermittent request traffic and logs things to the database as requests come in. If there's an 8 hour delay between requests, the ODBC connection times out. I expect this condition in the log code as follows:
if (!SQL_SUCCEEDED(SQLExecute(hstmt)))
{
disconnect();
if (connect() != 0)
return -1;
else if (!SQL_SUCCEEDED(SQLExecute(hstmt)))
return -1;
}
My problem is that I cannot re-establish the connection once it's been broken like this. I get errors back from myodbc like this:
(a snippet from my daemon's log file)
[Wed Feb 7 15:26:32 2007] Entering main run loop...
(first request established initial connection)
[Wed Feb 7 15:27:48 2007] xdm_odbc: Connection established. [DSN=xdas;UID=root;PWD=;].
(second request - over 8 hours later - tries to re-establish connection)
[Fri Feb 9 02:52:56 2007] xdm_odbc: the ODBC driver reported -1 during SQLConnect:
[Fri Feb 9 02:52:56 2007] xdm_odbc: HYT00:1:2019:[unixODBC][MySQL][ODBC 3.51 Driver]Can't initialize character set latin1 (path: /usr/share/mysql/charsets/)
[Fri Feb 9 02:52:56 2007] xdm_odbc: ODBC Reconnect failed, error -1.
What am I doing wrong? It seems simple enough to me. I noticed on the mailing list that a few folks had trouble using SQLDriverConnect, so I switched to SQLConnect, and now I get other types of errors trying to reconnect - not the least of these are that my daemon segfaults down inside of libmyodbc with the following stack trace:
#0 0xb741dc5d in my_strcasecmp_8bit () from /usr/lib/mysql/libmysqlclient.so.15
#1 0xb741514d in get_charset_number () from /usr/lib/mysql/libmysqlclient.so.15
#2 0xb74151ab in get_charset_by_csname () from /usr/lib/mysql/libmysqlclient.so.15
#3 0xb74320ec in mysql_real_connect () from /usr/lib/mysql/libmysqlclient.so.15
#4 0xb753c15a in SQLConnect (hdbc=0x807fe78, szDSN=0xb7d8df51, cbDSN=-3,
szUID=0xb7d8e270, cbUID=-3, szAuthStr=0xb7d8e1f0, cbAuthStr=-3) at connect.c:253
#5 0xb7d9d394 in SQLConnect (connection_handle=0x80616f0,
server_name=0xb7d8e2f0, name_length1=-3, user_name=0xb7d8e270,
name_length2=-3, authentication=0xb7d8e1f0, name_length3=-3) at SQLConnect.c:3820
#6 0xb7f63c23 in sql_connect () at xdm_odbc.c:322
#7 0xb7f6411a in xdm_append (msg=0x80776a9, msgsz=272) at xdm_odbc.c:394
#8 0x0804a3cf in xdasd_logger_append (msg=0x8077598, msgsz=272) at xdasd_logger.c:175
#9 0x0804a0e2 in bg_logger (unused=0x0) at xdasd_lcache.c:90
#10 0xb7f3b34b in start_thread () from /lib/libpthread.so.0
#11 0xb7ed365e in clone () from /lib/libc.so.6
Any ideas would be appreciated.
Thanks,
John
-----
John Calcote ([email protected])
Sr. Software Engineeer
Novell, Inc.
--
MySQL ODBC Mailing List
For list archives: http://lists.mysql.com/myodbc
To unsubscribe: http://lists.mysql.com/[email protected]
John Calcote.vcf
(text/plain, 395 B)
BEGIN:VCARD VERSION:2.1 X-GWTYPE:USER FN:John Calcote TEL;WORK:1-801-861-7517 ORG:;Unified Identity System Eng TE TEL;PREF;FAX:801/861-2292 EMAIL;WORK;PREF;NGW:[email protected] N:Calcote;John;;Sr. Software Engineer TITLE:Sr. Software Engineer ADR;DOM;WORK;PARCEL;POSTAL:;PRV-H-511;;Provo LABEL;DOM;WORK;PARCEL;POSTAL;ENCODING=QUOTED-PRINTABLE:John Calcote=0A= PRV-H-511=0A= Provo END:VCARD