diff options
author | foobar <sniper@php.net> | 2001-07-31 23:47:35 +0000 |
---|---|---|
committer | foobar <sniper@php.net> | 2001-07-31 23:47:35 +0000 |
commit | 474da88b4cc99f7e009edca9ddc9e90aef1494ec (patch) | |
tree | fc53931b2e5cce0049207a4d5acf27e38918e62b /ext/rpc/java/java.c | |
parent | e7ea61ad98bdc509aee5a5ff784735b782e30ed7 (diff) | |
download | php-git-474da88b4cc99f7e009edca9ddc9e90aef1494ec.tar.gz |
more ZTS fixes.
Diffstat (limited to 'ext/rpc/java/java.c')
-rw-r--r-- | ext/rpc/java/java.c | 127 |
1 files changed, 49 insertions, 78 deletions
diff --git a/ext/rpc/java/java.c b/ext/rpc/java/java.c index be030e3f80..2b5d154842 100644 --- a/ext/rpc/java/java.c +++ b/ext/rpc/java/java.c @@ -79,31 +79,21 @@ static char *javalib = 0; static int iniUpdated = 0; static void *dl_handle = 0; -typedef struct { +ZEND_BEGIN_MODULE_GLOBALS(java) JavaVM *jvm; JNIEnv *jenv; jobject php_reflect; jclass reflect_class; -} php_java_globals; +ZEND_END_MODULE_GLOBALS(java) #ifdef ZTS -#define JG(v) (java_globals->v) -#define JG_FETCH() php_java_globals *java_globals = ts_resource(java_globals_id) -#define JG_D php_java_globals *java_globals -#define JG_DC , JG_D -#define JG_C java_globals -#define JG_CC , JG_C -int java_globals_id; +# define JG(v) TSRMG(java_globals_id, zend_java_globals *, v) #else -#define JG(v) (java_globals.v) -#define JG_FETCH() -#define JG_D -#define JG_DC -#define JG_C -#define JG_CC -php_java_globals java_globals; +# define JG(v) (java_globals.v) #endif +ZEND_DECLARE_MODULE_GLOBALS(java) + static zend_class_entry java_class_entry; static PHP_INI_MH(OnIniUpdate) @@ -114,20 +104,15 @@ static PHP_INI_MH(OnIniUpdate) } PHP_INI_BEGIN() - PHP_INI_ENTRY1("java.class.path", - NULL, PHP_INI_ALL, OnIniUpdate, &classpath) + PHP_INI_ENTRY1("java.class.path", NULL, PHP_INI_ALL, OnIniUpdate, &classpath) #ifndef JNI_11 - PHP_INI_ENTRY1("java.home", - NULL, PHP_INI_ALL, OnIniUpdate, &javahome) - PHP_INI_ENTRY1("java.library.path", - NULL, PHP_INI_ALL, OnIniUpdate, &libpath) + PHP_INI_ENTRY1("java.home", NULL, PHP_INI_ALL, OnIniUpdate, &javahome) + PHP_INI_ENTRY1("java.library.path", NULL, PHP_INI_ALL, OnIniUpdate, &libpath) #endif #ifdef JAVALIB - PHP_INI_ENTRY1("java.library", - JAVALIB, PHP_INI_ALL, OnIniUpdate, &javalib) + PHP_INI_ENTRY1("java.library", JAVALIB, PHP_INI_ALL, OnIniUpdate, &javalib) #else - PHP_INI_ENTRY1("java.library", - NULL, PHP_INI_ALL, OnIniUpdate, &javalib) + PHP_INI_ENTRY1("java.library", NULL, PHP_INI_ALL, OnIniUpdate, &javalib) #endif PHP_INI_END() @@ -136,9 +121,8 @@ PHP_INI_END() /* * Destroy a Java Virtual Machine. */ -void jvm_destroy() { - JG_FETCH(); - +void jvm_destroy(TSRMLS_D) +{ if (JG(php_reflect)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), JG(php_reflect)); if (JG(jvm)) { (*JG(jvm))->DetachCurrentThread(JG(jvm)); @@ -158,7 +142,8 @@ void jvm_destroy() { */ #ifdef JNI_12 -static void addJVMOption(JavaVMInitArgs *vm_args, char *name, char *value) { +static void addJVMOption(JavaVMInitArgs *vm_args, char *name, char *value) +{ char *option = (char*) malloc(strlen(name) + strlen(value) + 1); strcpy(option, name); strcat(option, value); @@ -166,7 +151,8 @@ static void addJVMOption(JavaVMInitArgs *vm_args, char *name, char *value) { } #endif -static int jvm_create() { +static int jvm_create(TSRMLS_D) +{ int rc; jobject local_php_reflect; jthrowable error; @@ -185,8 +171,6 @@ static int jvm_create() { #endif #endif - JG_FETCH(); - iniUpdated=0; if (javalib) { @@ -276,7 +260,7 @@ static int jvm_create() { errAsUTF = (*jenv)->GetStringUTFChars(jenv, errString, &isCopy); php_error(E_ERROR, "%s", errAsUTF); if (isCopy) (*jenv)->ReleaseStringUTFChars(jenv, error, errAsUTF); - jvm_destroy(); + jvm_destroy(TSRMLS_C); return -1; } @@ -287,7 +271,8 @@ static int jvm_create() { /***************************************************************************/ -static jobject _java_makeObject(pval* arg JG_DC) { +static jobject _java_makeObject(pval* arg TSRMLS_DC) +{ JNIEnv *jenv = JG(jenv); jobject result; pval **handle; @@ -348,19 +333,19 @@ static jobject _java_makeObject(pval* arg JG_DC) { /* Iterate through hash */ zend_hash_internal_pointer_reset(arg->value.ht); while(zend_hash_get_current_data(arg->value.ht, (void**)&value) == SUCCESS) { - jval = _java_makeObject(*value JG_CC); + jval = _java_makeObject(*value TSRMLS_CC); switch (zend_hash_get_current_key(arg->value.ht, &string_key, &num_key, 0)) { case HASH_KEY_IS_STRING: key.type = IS_STRING; key.value.str.val = string_key; key.value.str.len = strlen(string_key); - jkey = _java_makeObject(&key JG_CC); + jkey = _java_makeObject(&key TSRMLS_CC); break; case HASH_KEY_IS_LONG: key.type = IS_LONG; key.value.lval = num_key; - jkey = _java_makeObject(&key JG_CC); + jkey = _java_makeObject(&key TSRMLS_CC); break; default: /* HASH_KEY_NON_EXISTANT */ jkey = 0; @@ -382,7 +367,8 @@ static jobject _java_makeObject(pval* arg JG_DC) { /***************************************************************************/ -static jobjectArray _java_makeArray(int argc, pval** argv JG_DC) { +static jobjectArray _java_makeArray(int argc, pval** argv TSRMLS_DC) +{ JNIEnv *jenv = JG(jenv); jclass objectClass = (*jenv)->FindClass(jenv, "java/lang/Object"); @@ -391,14 +377,16 @@ static jobjectArray _java_makeArray(int argc, pval** argv JG_DC) { int i; for (i=0; i<argc; i++) { - arg = _java_makeObject(argv[i] JG_CC); + arg = _java_makeObject(argv[i] TSRMLS_CC); (*jenv)->SetObjectArrayElement(jenv, result, i, arg); if (argv[i]->type != IS_OBJECT) (*jenv)->DeleteLocalRef(jenv, arg); } return result; } -static int checkError(pval *value) { + +static int checkError(pval *value) +{ if (value->type == IS_EXCEPTION) { php_error(E_WARNING, "%s", value->value.str.val); efree(value->value.str.val); @@ -415,8 +403,7 @@ static int checkError(pval *value) { * Invoke a method on an object. If method name is "java", create a new * object instead. */ -void java_call_function_handler - (INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) +void java_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { JNIEnv *jenv; @@ -428,12 +415,10 @@ void java_call_function_handler jlong result = 0; pval **arguments = (pval **) emalloc(sizeof(pval *)*arg_count); - JG_FETCH(); - getParametersArray(ht, arg_count, arguments); - if (iniUpdated && JG(jenv)) jvm_destroy(); - if (!JG(jenv)) jvm_create(); + if (iniUpdated && JG(jenv)) jvm_destroy(TSRMLS_C); + if (!JG(jenv)) jvm_create(TSRMLS_C); if (!JG(jenv)) return; jenv = JG(jenv); @@ -455,7 +440,7 @@ void java_call_function_handler className=(*jenv)->NewStringUTF(jenv, arguments[0]->value.str.val); (*jenv)->CallVoidMethod(jenv, JG(php_reflect), co, - className, _java_makeArray(arg_count-1, arguments+1 JG_CC), result); + className, _java_makeArray(arg_count-1, arguments+1 TSRMLS_CC), result); (*jenv)->DeleteLocalRef(jenv, className); @@ -476,7 +461,7 @@ void java_call_function_handler result = (jlong)(long)return_value; (*jenv)->CallVoidMethod(jenv, JG(php_reflect), invoke, - obj, method, _java_makeArray(arg_count, arguments JG_CC), result); + obj, method, _java_makeArray(arg_count, arguments TSRMLS_CC), result); (*jenv)->DeleteLocalRef(jenv, method); @@ -495,8 +480,6 @@ PHP_FUNCTION(java_last_exception_get) jlong result = 0; jmethodID lastEx; - JG_FETCH(); - if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT; result = (jlong)(long)return_value; @@ -514,8 +497,6 @@ PHP_FUNCTION(java_last_exception_clear) jlong result = 0; jmethodID clearEx; - JG_FETCH(); - if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT; result = (jlong)(long)return_value; @@ -529,7 +510,7 @@ PHP_FUNCTION(java_last_exception_clear) /***************************************************************************/ static pval _java_getset_property - (zend_property_reference *property_reference, jobjectArray value) + (zend_property_reference *property_reference, jobjectArray value TSRMLS_DC) { pval presult; jlong result = 0; @@ -543,7 +524,6 @@ static pval _java_getset_property jstring propName; JNIEnv *jenv; - JG_FETCH(); jenv = JG(jenv); propName = (*jenv)->NewStringUTF(jenv, property->element.value.str.val); @@ -571,22 +551,20 @@ static pval _java_getset_property return presult; } -pval java_get_property_handler - (zend_property_reference *property_reference) + +pval java_get_property_handler(zend_property_reference *property_reference TSRMLS_DC) { - pval presult = _java_getset_property(property_reference, 0); + pval presult = _java_getset_property(property_reference, 0 TSRMLS_CC); checkError(&presult); return presult; } -int java_set_property_handler - (zend_property_reference *property_reference, pval *value) +int java_set_property_handler(zend_property_reference *property_reference, pval *value TSRMLS_DC) { pval presult; - JG_FETCH(); - presult = _java_getset_property - (property_reference, _java_makeArray(1, &value JG_CC)); + + presult = _java_getset_property(property_reference, _java_makeArray(1, &value TSRMLS_CC) TSRMLS_CC); return checkError(&presult) ? FAILURE : SUCCESS; } @@ -596,16 +574,13 @@ static void _php_java_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { void *jobject = (void *)rsrc->ptr; - JG_FETCH(); if (JG(jenv)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), jobject); } -#ifdef ZTS -static void alloc_java_globals_ctor(php_java_globals *java_globals TSRMLS_DC) +static void alloc_java_globals_ctor(zend_java_globals *java_globals TSRMLS_DC) { - memset(java_globals, 0, sizeof(php_java_globals)); + memset(java_globals, 0, sizeof(zend_java_globals)); } -#endif PHP_MINIT_FUNCTION(java) { @@ -623,26 +598,23 @@ PHP_MINIT_FUNCTION(java) if (!classpath) classpath = getenv("CLASSPATH"); if (!libpath) { - TSRMLS_FETCH(); libpath=PG(extension_dir); } -#ifdef ZTS - ts_allocate_id(&java_globals_id, sizeof(php_java_globals), - (ts_allocate_ctor)alloc_java_globals_ctor, NULL); -#endif + ZEND_INIT_MODULE_GLOBALS(java, alloc_java_globals_ctor, NULL); return SUCCESS; } -PHP_MSHUTDOWN_FUNCTION(java) { - JG_FETCH(); +PHP_MSHUTDOWN_FUNCTION(java) +{ UNREGISTER_INI_ENTRIES(); - if (JG(jvm)) jvm_destroy(); + if (JG(jvm)) jvm_destroy(TSRMLS_C); return SUCCESS; } + function_entry java_functions[] = { PHP_FE(java_last_exception_get, NULL) PHP_FE(java_last_exception_clear, NULL) @@ -782,10 +754,9 @@ JNIEXPORT void JNICALL Java_net_php_reflect_setException } JNIEXPORT void JNICALL Java_net_php_reflect_setEnv - (JNIEnv *newJenv, jclass self) + (JNIEnv *newJenv, jclass self TSRMLS_DC) { jobject local_php_reflect; - JG_FETCH(); iniUpdated=0; JG(jenv)=newJenv; |