summaryrefslogtreecommitdiff
path: root/ext/rpc/java/java.c
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2001-07-31 23:47:35 +0000
committerfoobar <sniper@php.net>2001-07-31 23:47:35 +0000
commit474da88b4cc99f7e009edca9ddc9e90aef1494ec (patch)
treefc53931b2e5cce0049207a4d5acf27e38918e62b /ext/rpc/java/java.c
parente7ea61ad98bdc509aee5a5ff784735b782e30ed7 (diff)
downloadphp-git-474da88b4cc99f7e009edca9ddc9e90aef1494ec.tar.gz
more ZTS fixes.
Diffstat (limited to 'ext/rpc/java/java.c')
-rw-r--r--ext/rpc/java/java.c127
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;