File unixODBC-2.2.12-locking_fix.patch of Package unixODBC

diff -urN unixODBC-2.2.12.orig/DriverManager/SQLAllocHandle.c unixODBC-2.2.12/DriverManager/SQLAllocHandle.c
--- unixODBC-2.2.12.orig/DriverManager/SQLAllocHandle.c	2010-09-03 13:22:09.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLAllocHandle.c	2010-09-03 13:26:23.000000000 -0700
@@ -1235,6 +1235,8 @@
 		if ( __validate_env( (DMHENV) input_handle ))
 		{
 			DMHENV environment = (DMHENV) input_handle;
+
+			thread_protect( SQL_HANDLE_ENV, environment );
 			__post_internal_error( &environment -> error,
 						ERROR_HY092, NULL,
 						environment -> requested_version );
@@ -1244,6 +1246,8 @@
 		else if ( __validate_dbc( (DMHDBC) input_handle ))
 		{
 			DMHDBC connection = (DMHDBC) input_handle;
+
+		        thread_protect( SQL_HANDLE_DBC, connection );
 			__post_internal_error( &connection -> error,
 					ERROR_HY092, NULL,
 					connection -> environment -> requested_version );
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnect.c unixODBC-2.2.12/DriverManager/SQLBrowseConnect.c
--- unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnect.c	2005-11-21 09:25:43.000000000 -0800
+++ unixODBC-2.2.12/DriverManager/SQLBrowseConnect.c	2010-09-03 13:26:23.000000000 -0700
@@ -259,7 +259,7 @@
                 ERROR_08002, NULL, 
                 connection -> environment -> requested_version );
 
-        return function_return( -1, connection, SQL_ERROR );
+        return function_return( IGNORE_THREAD, connection, SQL_ERROR );
     }
 
     thread_protect( SQL_HANDLE_DBC, connection );
@@ -578,7 +578,7 @@
 
         if( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_DBC, connection, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, connection, ret, TRUE );
         }
 
         if ( !__connect_part_two( connection ))
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnectW.c unixODBC-2.2.12/DriverManager/SQLBrowseConnectW.c
--- unixODBC-2.2.12.orig/DriverManager/SQLBrowseConnectW.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLBrowseConnectW.c	2010-09-03 13:26:23.000000000 -0700
@@ -595,7 +595,7 @@
 
         if( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_DBC, connection, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, connection, ret, TRUE );
         }
 
         if ( !__connect_part_two( connection ))
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColAttribute.c unixODBC-2.2.12/DriverManager/SQLColAttribute.c
--- unixODBC-2.2.12.orig/DriverManager/SQLColAttribute.c	2006-03-08 01:18:41.000000000 -0800
+++ unixODBC-2.2.12/DriverManager/SQLColAttribute.c	2010-09-03 13:30:30.000000000 -0700
@@ -314,7 +314,7 @@
         __post_internal_error( &statement -> error,
                 ERROR_07009, NULL,
                 statement -> connection -> environment -> requested_version );
-        return function_return( statement, SQL_ERROR );
+        return function_return( SQL_HANDLE_STMT, statement, SQL_ERROR );
     }
 	
 	*/
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColAttributeW.c unixODBC-2.2.12/DriverManager/SQLColAttributeW.c
--- unixODBC-2.2.12.orig/DriverManager/SQLColAttributeW.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLColAttributeW.c	2010-09-03 13:31:01.000000000 -0700
@@ -180,7 +180,7 @@
         __post_internal_error( &statement -> error,
                 ERROR_07009, NULL,
                 statement -> connection -> environment -> requested_version );
-        return function_return( statement, SQL_ERROR );
+        return function_return( SQL_HANDLE_STMT, statement, SQL_ERROR );
     }
 	
 	*/
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColumns.c unixODBC-2.2.12/DriverManager/SQLColumns.c
--- unixODBC-2.2.12.orig/DriverManager/SQLColumns.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLColumns.c	2010-09-03 13:26:23.000000000 -0700
@@ -371,7 +371,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
         
         SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLColumnsW.c unixODBC-2.2.12/DriverManager/SQLColumnsW.c
--- unixODBC-2.2.12.orig/DriverManager/SQLColumnsW.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLColumnsW.c	2010-09-03 13:26:23.000000000 -0700
@@ -284,7 +284,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
         
         SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLDisconnect.c unixODBC-2.2.12/DriverManager/SQLDisconnect.c
--- unixODBC-2.2.12.orig/DriverManager/SQLDisconnect.c	2006-02-21 03:59:22.000000000 -0800
+++ unixODBC-2.2.12/DriverManager/SQLDisconnect.c	2010-09-03 13:26:23.000000000 -0700
@@ -321,7 +321,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
 	    {
-	        function_return_ex( SQL_HANDLE_DBC, connection, ret, TRUE );
+	        function_return_ex( IGNORE_THREAD, connection, ret, TRUE );
         }
         
         /*
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLExecDirect.c unixODBC-2.2.12/DriverManager/SQLExecDirect.c
--- unixODBC-2.2.12.orig/DriverManager/SQLExecDirect.c	2006-04-11 03:22:56.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLExecDirect.c	2010-09-03 13:26:23.000000000 -0700
@@ -431,7 +431,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         local_ret = SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLExecDirectW.c unixODBC-2.2.12/DriverManager/SQLExecDirectW.c
--- unixODBC-2.2.12.orig/DriverManager/SQLExecDirectW.c	2006-04-11 03:22:56.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLExecDirectW.c	2010-09-03 13:26:23.000000000 -0700
@@ -333,7 +333,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         local_ret = SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLExecute.c unixODBC-2.2.12/DriverManager/SQLExecute.c
--- unixODBC-2.2.12.orig/DriverManager/SQLExecute.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLExecute.c	2010-09-03 13:26:23.000000000 -0700
@@ -294,7 +294,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         local_ret = SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLForeignKeys.c unixODBC-2.2.12/DriverManager/SQLForeignKeys.c
--- unixODBC-2.2.12.orig/DriverManager/SQLForeignKeys.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLForeignKeys.c	2010-09-03 13:26:23.000000000 -0700
@@ -407,7 +407,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLForeignKeysW.c unixODBC-2.2.12/DriverManager/SQLForeignKeysW.c
--- unixODBC-2.2.12.orig/DriverManager/SQLForeignKeysW.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLForeignKeysW.c	2010-09-03 13:26:23.000000000 -0700
@@ -315,7 +315,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLFreeHandle.c unixODBC-2.2.12/DriverManager/SQLFreeHandle.c
--- unixODBC-2.2.12.orig/DriverManager/SQLFreeHandle.c	2006-04-21 07:25:55.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLFreeHandle.c	2010-09-03 13:27:41.000000000 -0700
@@ -226,8 +226,6 @@
                         ERROR_HY010, NULL,
                         environment -> requested_version );
 
-            	thread_release( SQL_HANDLE_ENV, environment );
-
                 return function_return( SQL_HANDLE_ENV, environment, SQL_ERROR );
             }
 
@@ -293,8 +291,6 @@
                         ERROR_HY010, NULL,
                         connection -> environment -> requested_version );
 
-            	thread_release( SQL_HANDLE_ENV, environment );
-
                 return function_return( SQL_HANDLE_ENV, environment, SQL_ERROR );
             }
 
@@ -396,8 +392,6 @@
                           ERROR_HY010, NULL,
                           statement -> connection -> environment -> requested_version );
 
-                thread_release( SQL_HANDLE_STMT, statement );
-				
                 return function_return( SQL_HANDLE_STMT, statement, SQL_ERROR );
             }
 
@@ -525,8 +519,6 @@
                         ERROR_IM001, NULL,
                         connection -> environment -> requested_version );
 
-            	thread_release( SQL_HANDLE_DESC, descriptor );
-
                 return function_return( SQL_HANDLE_DESC, descriptor, SQL_ERROR );
             }
             else
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLMoreResults.c unixODBC-2.2.12/DriverManager/SQLMoreResults.c
--- unixODBC-2.2.12.orig/DriverManager/SQLMoreResults.c	2006-03-08 01:18:41.000000000 -0800
+++ unixODBC-2.2.12/DriverManager/SQLMoreResults.c	2010-09-03 13:26:23.000000000 -0700
@@ -249,7 +249,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLParamData.c unixODBC-2.2.12/DriverManager/SQLParamData.c
--- unixODBC-2.2.12.orig/DriverManager/SQLParamData.c	2005-11-21 09:25:43.000000000 -0800
+++ unixODBC-2.2.12/DriverManager/SQLParamData.c	2010-09-03 13:26:23.000000000 -0700
@@ -261,7 +261,7 @@
 
             if ( ret == SQL_SUCCESS_WITH_INFO )
             {
-                function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+                function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
             }
 
             local_ret = SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeys.c unixODBC-2.2.12/DriverManager/SQLPrimaryKeys.c
--- unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeys.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLPrimaryKeys.c	2010-09-03 13:26:23.000000000 -0700
@@ -364,7 +364,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeysW.c unixODBC-2.2.12/DriverManager/SQLPrimaryKeysW.c
--- unixODBC-2.2.12.orig/DriverManager/SQLPrimaryKeysW.c	2005-09-27 08:44:06.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLPrimaryKeysW.c	2010-09-03 13:26:23.000000000 -0700
@@ -287,7 +287,7 @@
 
         if ( ret == SQL_SUCCESS_WITH_INFO )
         {
-            function_return_ex( SQL_HANDLE_STMT, statement, ret, TRUE );
+            function_return_ex( IGNORE_THREAD, statement, ret, TRUE );
         }
 
         SQLNUMRESULTCOLS( statement -> connection,
diff -urN unixODBC-2.2.12.orig/DriverManager/SQLTransact.c unixODBC-2.2.12/DriverManager/SQLTransact.c
--- unixODBC-2.2.12.orig/DriverManager/SQLTransact.c	2006-05-31 10:35:34.000000000 -0700
+++ unixODBC-2.2.12/DriverManager/SQLTransact.c	2010-09-03 13:26:23.000000000 -0700
@@ -434,8 +434,6 @@
                     ERROR_HY012, NULL,
                     environment -> requested_version );
 
-            thread_release( SQL_HANDLE_ENV, environment );
-
             return function_return( SQL_HANDLE_ENV, environment, SQL_ERROR );
         }
 
openSUSE Build Service is sponsored by