#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
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)
/* 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;
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;
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);