if (jsj_env == NULL) jsj_env = JSJ_callbacks->map_js_context_to_jsj_thread(cx, &err_msg);
if (jsj_env == NULL && JSJ_callbacks && JSJ_callbacks->map_js_context_to_jsj_thread) jsj_env = JSJ_callbacks->map_js_context_to_jsj_thread(cx, &err_msg);
jsj_EnterJava(JSContext *cx, JNIEnv **envp){    JSJavaThreadState *jsj_env;    char *err_msg;    *envp = NULL;    err_msg = NULL;        jsj_env = the_java_jsj_env;    if (jsj_env == NULL)            jsj_env = JSJ_callbacks->map_js_context_to_jsj_thread(cx, &err_msg);    if (!jsj_env) {        if (err_msg) {            JS_ReportError(cx, err_msg);            free(err_msg);        }        return NULL;    }    JS_ASSERT((jsj_env->recursion_depth == 0) || (jsj_env->cx == cx));    jsj_env->recursion_depth++;    jsj_env->cx = cx;    if (envp)        *envp = jsj_env->jEnv;    return jsj_env;}