dc97acc
diff -Nur qt-x11-free-3.3.8/src/sql/drivers/mysql/qsql_mysql.cpp qt-x11-free-3.3.8-me/src/sql/drivers/mysql/qsql_mysql.cpp
dc97acc
--- qt-x11-free-3.3.8/src/sql/drivers/mysql/qsql_mysql.cpp	2007-01-11 14:38:34.000000000 +0100
dc97acc
+++ qt-x11-free-3.3.8-snapshot-me/src/sql/drivers/mysql/qsql_mysql.cpp	2007-05-22 17:15:26.000000000 +0200
dc97acc
@@ -37,7 +37,6 @@
dc97acc
 #include "qsql_mysql.h"
dc97acc
 #include <private/qsqlextension_p.h>
dc97acc
 
dc97acc
-#include <qapplication.h>
dc97acc
 #include <qdatetime.h>
dc97acc
 #include <qvaluevector.h>
dc97acc
 #include <qsqlrecord.h>
dc97acc
@@ -52,6 +51,9 @@
dc97acc
 
dc97acc
 QPtrDict<QSqlOpenExtension> *qSqlOpenExtDict();
dc97acc
 
dc97acc
+static int qMySqlConnectionCount = 0;
dc97acc
+static bool qMySqlInitHandledByUser = FALSE;
dc97acc
+
dc97acc
 class QMYSQLOpenExtension : public QSqlOpenExtension
dc97acc
 {
dc97acc
 public:
dc97acc
@@ -354,9 +356,8 @@
dc97acc
 {
dc97acc
 #ifndef Q_NO_MYSQL_EMBEDDED
dc97acc
 # if MYSQL_VERSION_ID >= 40000
dc97acc
-    static bool init = FALSE;
dc97acc
-    if ( init )
dc97acc
-	return;
dc97acc
+    if ( qMySqlInitHandledByUser || qMySqlConnectionCount > 1 )
dc97acc
+        return;
dc97acc
 
dc97acc
     // this should only be called once
dc97acc
     // has no effect on client/server library
dc97acc
@@ -366,8 +367,6 @@
dc97acc
 	qWarning( "QMYSQLDriver::qServerInit: unable to start server." );
dc97acc
 #  endif
dc97acc
     }
dc97acc
-    qAddPostRoutine(qServerEnd);
dc97acc
-    init = TRUE;    
dc97acc
     
dc97acc
 # endif // MYSQL_VERSION_ID
dc97acc
 #endif // Q_NO_MYSQL_EMBEDDED
dc97acc
@@ -392,8 +391,10 @@
dc97acc
 	d->mysql = (MYSQL *) con;
dc97acc
 	setOpen( TRUE );
dc97acc
 	setOpenError( FALSE );
dc97acc
+        if (qMySqlConnectionCount == 1)
dc97acc
+            qMySqlInitHandledByUser = TRUE;
dc97acc
     } else {
dc97acc
-	qServerInit();
dc97acc
+        qServerInit();
dc97acc
     }
dc97acc
 }
dc97acc
 
dc97acc
@@ -402,10 +403,15 @@
dc97acc
     qSqlOpenExtDict()->insert( this, new QMYSQLOpenExtension(this) );
dc97acc
     d = new QMYSQLDriverPrivate();
dc97acc
     d->mysql = 0;
dc97acc
+    qMySqlConnectionCount++;
dc97acc
 }
dc97acc
 
dc97acc
 QMYSQLDriver::~QMYSQLDriver()
dc97acc
 {
dc97acc
+    qMySqlConnectionCount--;
dc97acc
+    if (qMySqlConnectionCount == 0 && !qMySqlInitHandledByUser)
dc97acc
+        qServerEnd();
dc97acc
+
dc97acc
     delete d;
dc97acc
     if ( !qSqlOpenExtDict()->isEmpty() ) {
dc97acc
 	QSqlOpenExtension *ext = qSqlOpenExtDict()->take( this );