Threading crash using ODBC
От | markw |
---|---|
Тема | Threading crash using ODBC |
Дата | |
Msg-id | 3DD51F26.7050201@mohawksoft.com обсуждение исходный текст |
Список | pgsql-odbc |
Here's what I have: I have an application with 1 main thread and a number of worker threads. At startup, I allocate a number of ODBC connections. I have an internal queue that is protected by a mutex. When one of the worker threads wants to use the database, it gets an un occupied SQL connection from the queue. At startup, I can execte a query just fine. When I try to execute a query from one of the worker threads, I get a core dump. I am using UNIX ODBC and the PostgreSQL driver, as shipped with RedHat 7.3. The stack trace looks like this: 0 0x402fba4c in CC_send_query () from /usr/lib/libodbcpsql.so (gdb) where #0 0x402fba4c in CC_send_query () from /usr/lib/libodbcpsql.so #1 0x40314842 in SC_execute () from /usr/lib/libodbcpsql.so #2 0x40304c45 in PG_SQLExecute () from /usr/lib/libodbcpsql.so #3 0x40304c6b in SQLExecute () from /usr/lib/libodbcpsql.so #4 0x402a13f4 in SQLExecute () from /usr/lib/libodbc.so.1 #5 0x40023d6f in MSqlODBC::ExecResult (this=0x806bfd4, sql=0x4037f83c "select value, timeout from msession_sessions where session = '2b7atuahma6u9igcorr7c6q8ld7ne86o'") at modbcsql.cpp:360 The ExecResult function looks like this: SQLRESULT MSqlODBC::ExecResult(char *sql) { TRACE_FUNCT("ExecResult"); unsigned long err; HSTMT hstmt; TRACE_STR(sql); err = SQLAllocStmt(m_hdbc, &hstmt); if(err != SQL_SUCCESS) { fprintf(stderr, "Could not get Stmt\n"); return NULL; } err = SQLPrepare(hstmt, (SQLCHAR *)sql, SQL_NTS); if(err != SQL_SUCCESS) { fprintf(stderr, "Could not Prepare Statement [%s]\n", sql); return NULL; } err = SQLExecute(hstmt); if(err != SQL_SUCCESS) { fprintf(stderr, "Could not ExecDirect\n"); SQLFreeStmt(hstmt, SQL_DROP); hstmt = NULL; } return (SQLRESULT)build_result(hstmt); }
В списке pgsql-odbc по дате отправления: