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; | 
