abies           Mon May 31 20:44:19 2004 EDT

  Modified files:              
    /php-src/ext/informix       ifx.ec 
  Log:
  Fixed bug #28569 (connection id is not thread safe)
  
http://cvs.php.net/diff.php/php-src/ext/informix/ifx.ec?r1=1.105&r2=1.106&ty=u
Index: php-src/ext/informix/ifx.ec
diff -u php-src/ext/informix/ifx.ec:1.105 php-src/ext/informix/ifx.ec:1.106
--- php-src/ext/informix/ifx.ec:1.105   Mon May 31 17:04:20 2004
+++ php-src/ext/informix/ifx.ec Mon May 31 20:44:19 2004
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: ifx.ec,v 1.105 2004/05/31 21:04:20 pajoye Exp $ */
+/* $Id: ifx.ec,v 1.106 2004/06/01 00:44:19 abies Exp $ */
 
 /* -------------------------------------------------------------------
  * if you want a function reference : "grep '^\*\*' ifx.ec" will give
@@ -54,6 +54,12 @@
 #include <winsock.h>
 #endif
 
+#ifdef ZTS
+#define IFX_THRD_ID tsrm_thread_id()
+#else
+#define IFX_THRD_ID 0
+#endif
+
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -123,16 +129,16 @@
 
 typedef char IFX[128];
 #define SAFE_STRING(s) ((s) ? (s) : "")
-#define PHP_IFX_CHECK_CONNECTION(ifx)       \
-        {                                   \
-            if (ifx_check() < 0) {          \
-               char *ifx_err = ifx_error(ifx); \
-                IFXG(sv_sqlcode) = SQLCODE; \
-                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails 
(%s)", ifx, ifx_err); \
-                efree(ifx_err);                    \
-                RETURN_FALSE;               \
-            }                               \
-        }    
+#define PHP_IFX_CHECK_CONNECTION(ifx) \
+       do { \
+               if (ifx_check() < 0) { \
+                       char *ifx_err = ifx_error(ifx); \
+                       IFXG(sv_sqlcode) = SQLCODE; \
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s 
fails (%s)", ifx, ifx_err); \
+                       efree(ifx_err); \
+                       RETURN_FALSE; \
+               } \
+       } while (0)
 
 function_entry ifx_functions[] = {
        PHP_FE(ifx_connect,            NULL)
@@ -541,7 +547,7 @@
                        /* create the link */
                        ifx = (char *) malloc(sizeof(IFX));
                        IFXG(connectionid)++;
-                       sprintf(ifx, "%s%x", SAFE_STRING(user), IFXG(connectionid));
+                       sprintf(ifx, "%s%x_%x", SAFE_STRING(user), 
IFX_THRD_ID,IFXG(connectionid));
                        
                        EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd 
WITH CONCURRENT TRANSACTION;  
        
@@ -644,7 +650,7 @@
 
                ifx = (char *) emalloc(sizeof(IFX));
                IFXG(connectionid)++;
-               sprintf(ifx, "connec%x", IFXG(connectionid));
+               sprintf(ifx, "connec%x_%x", IFX_THRD_ID, IFXG(connectionid));
                
                EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH 
CONCURRENT TRANSACTION;
 
@@ -1241,10 +1247,10 @@
        statement = Z_STRVAL_PP(query);
 
        IFXG(cursorid)++;
-       sprintf(statemid, "statem%x", IFXG(cursorid)); 
-       sprintf(cursorid, "cursor%x", IFXG(cursorid)); 
-       sprintf(descrpid, "descrp%x", IFXG(cursorid)); 
-       sprintf(i_descrpid, "i_descrp%x", IFXG(cursorid));
+       sprintf(statemid, "statem%x_%x", IFX_THRD_ID, IFXG(cursorid));
+       sprintf(cursorid, "cursor%x_%x", IFX_THRD_ID, IFXG(cursorid));
+       sprintf(descrpid, "descrp%x_%x", IFX_THRD_ID, IFXG(cursorid));
+       sprintf(i_descrpid, "i_descrp%x_%x", IFX_THRD_ID,IFXG(cursorid));
 
        EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to