MySQL Server 4.1.1 alpha
MyODBC Connector: 3.51.08
Hello all,
I am experiencing the following problem: I have an dialog-based MFC app using the
CDatabase class to connect to a MySQL DB using ODBC. My connection string specifies a
DSN with the connection information. Additionally, this is a Unicode compilation (
Project Properties > General > Use Unicode Character Set ). My test app has a
CWinThread-derived class named CDBThread, with a CDatabase member.
CDBThread::InitInstance() calls OpenEx() for the CDatabase member. So far so good.
For the app's InitInstance, all I do is call AfxBeginThread() twice, to create two
threads of type CDBThread. The application crashes when the db thread tries to connect
to the db.
However, there are two things I can do to avoid the crash:
- Start only ONE CDBThread instead of TWO.
- Compile using multi-byte character set instead of Unicode.
Of course, these are both unnaceptable solutions. But it seems the problem is related
only to multi-threaded apps using Unicode. Each CDBThread has its own CDatabase
object, so no additional synchronization should be needed as two separate db
connections should be created, right?
Oh, yeah, I tried replacing the MySQL db with an MS Access db and the problem went
away. Any ideas? Is this a bug?
Here's the stack at the time of the crash:
odbc32.dll!1f7b7e08()
odbc32.dll!1f7b8cd1()
odbc32.dll!1f7c59b8()
odbc32.dll!1f7a2f84()
odbc32.dll!1f7a2cb8()
msvcrt.dll!___updatetlocinfo() + 0x40
[EMAIL PROTECTED]() + 0x67
[EMAIL PROTECTED]() + 0xb
[EMAIL PROTECTED]() + 0xa
[EMAIL PROTECTED]() + 0x2bf
[EMAIL PROTECTED]() + 0x1a250
[EMAIL PROTECTED]() + 0x8f4
[EMAIL PROTECTED]() + 0x144
[EMAIL PROTECTED]() + 0x3c
> mfc71ud.dll!CWnd::GetActiveWindow() Line 193 + 0xf C++
// From my db thread class:
BOOL CDBThread::InitInstance()
{
m_db.OpenEx( _T( "ODBC;DRIVER=MySQL ODBC 3.51 Driver;DSN=dbtest;" ) );
return TRUE;
}
// From the main app:
BOOL CDbtestApp::InitInstance()
{
// (...) MFC wizard stuff here
m_Thread[ 0 ] = AfxBeginThread( RUNTIME_CLASS( CDBThread ) );
m_Thread[ 1 ] = AfxBeginThread( RUNTIME_CLASS( CDBThread ) ); // Comment this
out = no crash
// (...) more MFC wizard stuff here
}
Thank you,
Silvio Lopes de Oliveira
Software Engineer
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]