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