CVS update: php31/ext/odbc

From: Date: Wed, 26 Aug 1998 03:14:19 +0000
Subject: CVS update: php31/ext/odbc
Groups: php.dev 
Request: Send a blank email to php-dev+get-584@lists.php.net to get a copy of this message
Date: Tuesday August 25, 1998 @ 23:14 Author: shane Update of /repository/php31/ext/odbc In directory asf:/u2/tmp/cvs-serv29256/ext/odbc Modified Files: unified_odbc.c Log Message: overwrite odbc. it works again. Index: php31/ext/odbc/unified_odbc.c diff -c php31/ext/odbc/unified_odbc.c:2.2 php31/ext/odbc/unified_odbc.c:2.3 *** php31/ext/odbc/unified_odbc.c:2.2 Tue Aug 11 14:22:32 1998 --- php31/ext/odbc/unified_odbc.c Tue Aug 25 23:14:19 1998 *************** *** 34,48 **** #ifdef THREAD_SAFE #include "tls.h" #endif ! #ifndef WIN32 #include "config.h" #include "build-defs.h" #endif #include <fcntl.h> - #ifdef COMPILE_DL - #include "../phpdl.h" - #endif #include "php.h" #include "internal_functions.h" #include "ext/standard/php3_string.h" --- 34,45 ---- #ifdef THREAD_SAFE #include "tls.h" #endif ! #ifndef MSVC5 #include "config.h" #include "build-defs.h" #endif #include <fcntl.h> #include "php.h" #include "internal_functions.h" #include "ext/standard/php3_string.h" *************** *** 54,61 **** #ifdef THREAD_SAFE ! MUTEX_T UODBC_MUTEX; ! TLS_T UODBC_TLS; static int numthreads=0; typedef struct UODBC_GLOBAL_STRUCT { --- 51,58 ---- #ifdef THREAD_SAFE ! void *UODBC_MUTEX; ! DWORD UODBC_TLS; static int numthreads=0; typedef struct UODBC_GLOBAL_STRUCT { *************** *** 65,72 **** #define UODBC_GLOBAL(a) UODBC_GLOBALS->a #define UODBC_TLS_VARS \ ! UODBC_GLOBAL_STRUCT *UODBC_GLOBALS;\ ! PHP3_TLS_GET(UODBC_TLS,UODBC_GLOBALS); #else UODBC_MODULE PHP3_UODBC_MODULE; --- 62,68 ---- #define UODBC_GLOBAL(a) UODBC_GLOBALS->a #define UODBC_TLS_VARS \ ! UODBC_GLOBAL_STRUCT *UODBC_GLOBALS = TlsGetValue(UODBC_TLS); #else UODBC_MODULE PHP3_UODBC_MODULE; *************** *** 122,131 **** }; ! #ifdef COMPILE_DL ! DLEXPORT php3_module_entry *get_module() { return &UODBC_MODULE_ENTRY; }; ! #if (WIN32|WINNT) BOOL WINAPI DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) --- 118,129 ---- }; ! #if COMPILE_DL ! php3_module_entry *get_module() { return &UODBC_MODULE_ENTRY; }; ! #if (WIN32|WINNT) && defined(THREAD_SAFE) ! /*NOTE: You should have an odbc.def file where you ! export DllMain*/ BOOL WINAPI DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) *************** *** 210,230 **** int PHP3_MINIT_UODBC(INIT_FUNC_ARGS) { #ifdef THREAD_SAFE UODBC_GLOBAL_STRUCT *UODBC_GLOBALS; ! PHP3_MUTEX_ALLOC(UODBC_MUTEX); ! PHP3_MUTEX_LOCK(UODBC_MUTEX); numthreads++; if (numthreads==1){ ! if (!PHP3_TLS_PROC_STARTUP(UODBC_TLS)){ ! PHP3_MUTEX_UNLOCK(UODBC_MUTEX); ! PHP3_MUTEX_FREE(UODBC_MUTEX); ! return 0; ! } ! } ! PHP3_MUTEX_UNLOCK(UODBC_MUTEX); ! if(!PHP3_TLS_THREAD_INIT(UODBC_TLS,UODBC_GLOBALS,UODBC_GLOBAL_STRUCT)) return 0; #endif SQLAllocEnv(&UODBC_GLOBAL(PHP3_UODBC_MODULE).henv); --- 208,237 ---- int PHP3_MINIT_UODBC(INIT_FUNC_ARGS) { + #ifdef SQLANY_BUG + HDBC foobar; + RETCODE rc; + #endif #ifdef THREAD_SAFE UODBC_GLOBAL_STRUCT *UODBC_GLOBALS; ! #if !COMPILE_DL ! #if WIN32|WINNT ! CREATE_MUTEX(UODBC_MUTEX,"UODBC_TLS"); ! #endif ! #endif ! #if !COMPILE_DL ! SET_MUTEX(UODBC_MUTEX); numthreads++; if (numthreads==1){ ! if ((UODBC_TLS=TlsAlloc())==0xFFFFFFFF){ ! FREE_MUTEX(UODBC_MUTEX); return 0; + }} + FREE_MUTEX(UODBC_MUTEX); + #endif + UODBC_GLOBALS = + (UODBC_GLOBAL_STRUCT *) LocalAlloc(LPTR, sizeof(UODBC_GLOBAL_STRUCT)); + TlsSetValue(UODBC_TLS, (void *) UODBC_GLOBALS); #endif SQLAllocEnv(&UODBC_GLOBAL(PHP3_UODBC_MODULE).henv); *************** *** 259,264 **** --- 266,289 ---- UODBC_GLOBAL(PHP3_UODBC_MODULE).le_pconn = register_list_destructors(NULL, _CLOSE_UODBC_PCONNECTION); + #ifdef SQLANY_BUG + /* Make a dumb connection to avoid crash on SQLFreeEnv(), + * then release it immediately. + * This is required for SQL Anywhere 5.5.00 on QNX 4.24 at least. + * The SQLANY_BUG should be defined in CFLAGS. + */ + if ( SQLAllocConnect(UODBC_GLOBAL(PHP3_UODBC_MODULE).henv, &foobar) != SQL_SUCCESS ) + UODBC_SQL_ERROR(SQL_NULL_HDBC, SQL_NULL_HSTMT, "SQLAllocConnect"); + else + { + rc = SQLConnect(foobar, UODBC_GLOBAL(PHP3_UODBC_MODULE).defDB, SQL_NTS, UODBC_GLOBAL(PHP3_UODBC_MODULE).defUser, + SQL_NTS, UODBC_GLOBAL(PHP3_UODBC_MODULE).defPW, SQL_NTS); + if(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) + SQLDisconnect( foobar ); + SQLFreeConnect( foobar ); + } + #endif + return SUCCESS; } *************** *** 270,293 **** UODBC_GLOBAL(PHP3_UODBC_MODULE).defConn = -1; UODBC_GLOBAL(PHP3_UODBC_MODULE).num_links = UODBC_GLOBAL(PHP3_UODBC_MODULE).num_persistent; ! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultlrl = 0; ! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultbinmode = 0; return SUCCESS; } int PHP3_MSHUTDOWN_UODBC(void) { ! UODBC_TLS_VARS; SQLFreeEnv(UODBC_GLOBAL(PHP3_UODBC_MODULE).henv); #ifdef THREAD_SAFE ! PHP3_TLS_THREAD_FREE(UODBC_GLOBALS); ! PHP3_MUTEX_LOCK(UODBC_MUTEX); numthreads--; if (!numthreads) { ! PHP3_TLS_PROC_SHUTDOWN(UODBC_TLS); } ! PHP3_MUTEX_UNLOCK(UODBC_MUTEX); ! PHP3_MUTEX_FREE(UODBC_MUTEX); #endif return SUCCESS; } --- 295,332 ---- UODBC_GLOBAL(PHP3_UODBC_MODULE).defConn = -1; UODBC_GLOBAL(PHP3_UODBC_MODULE).num_links = UODBC_GLOBAL(PHP3_UODBC_MODULE).num_persistent; ! if (cfg_get_long(ODBC_INI_DEFAULTLRL, &UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultlrl) ! == FAILURE){ ! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultlrl = 4096; ! } ! if (cfg_get_long(ODBC_INI_DEFAULTBINMODE, &UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultbinmode) == FAILURE){ ! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultbinmode = 1; ! } return SUCCESS; } int PHP3_MSHUTDOWN_UODBC(void) { ! #ifdef THREAD_SAFE ! UODBC_GLOBAL_STRUCT *UODBC_GLOBALS; ! UODBC_GLOBALS = TlsGetValue(UODBC_TLS); ! #endif SQLFreeEnv(UODBC_GLOBAL(PHP3_UODBC_MODULE).henv); #ifdef THREAD_SAFE ! if (UODBC_GLOBALS != 0) { ! LocalFree((HLOCAL) UODBC_GLOBALS); ! } ! #if !COMPILE_DL ! SET_MUTEX(UODBC_MUTEX); numthreads--; if (!numthreads) { ! if (!TlsFree(UODBC_TLS)) { ! FREE_MUTEX(UODBC_MUTEX); ! return 0; ! } } ! FREE_MUTEX(UODBC_MUTEX); ! #endif #endif return SUCCESS; } *************** *** 524,530 **** case SQL_TIMESTAMP: result->values[i].value = (char *)emalloc(27); SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value, ! 27, &result->values[i].vallen); break; #endif /* HAVE_ADABAS */ default: --- 563,569 ---- case SQL_TIMESTAMP: result->values[i].value = (char *)emalloc(27); SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value, ! 27, &result->values[i].vallen); break; #endif /* HAVE_ADABAS */ default: *************** *** 1370,1376 **** UWORD RowStatus[1]; #endif #if !defined(COMPILE_DL) && defined(THREAD_SAFE) ! TLS_VARS; #endif numArgs = ARG_COUNT(ht); --- 1409,1415 ---- UWORD RowStatus[1]; #endif #if !defined(COMPILE_DL) && defined(THREAD_SAFE) ! TLS_VARS #endif numArgs = ARG_COUNT(ht); -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#584) next »