📄 java_dbenv.c
字号:
dbtp = NULL; err = dbenv->rep_start(dbenv, dbtp, flags); verify_return(jnienv, err, 0);out: if (cookie != NULL) locked_dbt_put(&ldbt, jnienv, dbenv);}JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_rep_1stat (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); DB_REP_STAT *statp = NULL; jobject retval = NULL; jclass dbclass; if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->rep_stat(dbenv, &statp, (u_int32_t)flags); if (verify_return(jnienv, err, 0)) { if ((dbclass = get_class(jnienv, name_DB_REP_STAT)) == NULL || (retval = create_default_object(jnienv, name_DB_REP_STAT)) == NULL) goto err; /* An exception has been posted. */ __jv_fill_rep_stat(jnienv, dbclass, retval, statp);err: __os_ufree(dbenv, statp); } return (retval);}JNIEXPORT void JNICALLJava_com_sleepycat_db_DbEnv_set_1rep_1limit (JNIEnv *jnienv, /* DbEnv */ jobject jthis, jint gbytes, jint bytes){ DB_ENV *dbenv; int err; dbenv = get_DB_ENV(jnienv, jthis); if (verify_non_null(jnienv, dbenv)) { err = dbenv->set_rep_limit(dbenv, (u_int32_t)gbytes, (u_int32_t)bytes); verify_return(jnienv, err, 0); }}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_rep_1transport_1changed (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint envid, /* DbRepTransport */ jobject jreptransport){ DB_ENV *dbenv; DB_ENV_JAVAINFO *dbenvinfo; dbenv = get_DB_ENV(jnienv, jthis); dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis); if (!verify_non_null(jnienv, dbenv) || !verify_non_null(jnienv, dbenvinfo) || !verify_non_null(jnienv, jreptransport)) return; dbjie_set_rep_transport_object(dbenvinfo, jnienv, dbenv, envid, jreptransport);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1rpc_1server (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbClient*/ jobject jclient, jstring jhost, jlong tsec, jlong ssec, jint flags){ int err; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); const char *host = (*jnienv)->GetStringUTFChars(jnienv, jhost, NULL); if (jclient != NULL) { report_exception(jnienv, "DbEnv.set_rpc_server client arg " "must be null; reserved for future use", EINVAL, 0); return; } if (verify_non_null(jnienv, dbenv)) { err = dbenv->set_rpc_server(dbenv, NULL, host, (long)tsec, (long)ssec, flags); /* Throw an exception if the call failed. */ verify_return(jnienv, err, 0); }}JAVADB_METHOD(DbEnv_set_1shm_1key, (JAVADB_ARGS, jlong shm_key), DB_ENV, set_shm_key, (c_this, (long)shm_key))JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1tx_1timestamp (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jlong seconds){ int err; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); time_t time = seconds; if (verify_non_null(jnienv, dbenv)) { err = dbenv->set_tx_timestamp(dbenv, &time); /* Throw an exception if the call failed. */ verify_return(jnienv, err, 0); }}JAVADB_METHOD(DbEnv_set_1verbose, (JAVADB_ARGS, jint which, jboolean onoff), DB_ENV, set_verbose, (c_this, which, onoff ? 1 : 0))/*static*/JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1major (JNIEnv * jnienv, jclass this_class){ COMPQUIET(jnienv, NULL); COMPQUIET(this_class, NULL); return (DB_VERSION_MAJOR);}/*static*/JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1minor (JNIEnv * jnienv, jclass this_class){ COMPQUIET(jnienv, NULL); COMPQUIET(this_class, NULL); return (DB_VERSION_MINOR);}/*static*/JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1patch (JNIEnv * jnienv, jclass this_class){ COMPQUIET(jnienv, NULL); COMPQUIET(this_class, NULL); return (DB_VERSION_PATCH);}/*static*/JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1string (JNIEnv *jnienv, jclass this_class){ COMPQUIET(this_class, NULL); return ((*jnienv)->NewStringUTF(jnienv, DB_VERSION_STRING));}JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1id (JNIEnv *jnienv, /*DbEnv*/ jobject jthis){ int err; u_int32_t id; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (-1); err = dbenv->lock_id(dbenv, &id); verify_return(jnienv, err, 0); return (id);}JAVADB_METHOD(DbEnv_lock_1id_1free, (JAVADB_ARGS, jint id), DB_ENV, lock_id_free, (c_this, id))JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1stat (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); DB_LOCK_STAT *statp = NULL; jobject retval = NULL; jclass dbclass; if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->lock_stat(dbenv, &statp, (u_int32_t)flags); if (verify_return(jnienv, err, 0)) { if ((dbclass = get_class(jnienv, name_DB_LOCK_STAT)) == NULL || (retval = create_default_object(jnienv, name_DB_LOCK_STAT)) == NULL) goto err; /* An exception has been posted. */ __jv_fill_lock_stat(jnienv, dbclass, retval, statp);err: __os_ufree(dbenv, statp); } return (retval);}JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1detect (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint atype, jint flags){ int err; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); int aborted; if (!verify_non_null(jnienv, dbenv)) return (0); err = dbenv->lock_detect(dbenv, atype, flags, &aborted); verify_return(jnienv, err, 0); return (aborted);}JNIEXPORT /*DbLock*/ jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1get (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*u_int32_t*/ jint locker, jint flags, /*const Dbt*/ jobject obj, /*db_lockmode_t*/ jint lock_mode){ int err; DB_ENV *dbenv; DB_LOCK *dblock; LOCKED_DBT lobj; /*DbLock*/ jobject retval; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (NULL); if ((err = __os_malloc(dbenv, sizeof(DB_LOCK), &dblock)) != 0) if (!verify_return(jnienv, err, 0)) return (NULL); memset(dblock, 0, sizeof(DB_LOCK)); err = 0; retval = NULL; if (locked_dbt_get(&lobj, jnienv, dbenv, obj, inOp) != 0) goto out; err = dbenv->lock_get(dbenv, locker, flags, &lobj.javainfo->dbt, (db_lockmode_t)lock_mode, dblock); if (err == DB_LOCK_NOTGRANTED) report_notgranted_exception(jnienv, "DbEnv.lock_get not granted", DB_LOCK_GET, lock_mode, obj, NULL, -1); else if (verify_return(jnienv, err, 0)) { retval = create_default_object(jnienv, name_DB_LOCK); set_private_dbobj(jnienv, name_DB_LOCK, retval, dblock); } out: locked_dbt_put(&lobj, jnienv, dbenv); return (retval);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_lock_1vec (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*u_int32_t*/ jint locker, jint flags, /*const Dbt*/ jobjectArray list, jint offset, jint count){ DB_ENV *dbenv; DB_LOCKREQ *lockreq; DB_LOCKREQ *prereq; /* preprocessed requests */ DB_LOCKREQ *failedreq; DB_LOCK *lockp; LOCKED_DBT *locked_dbts; int err; int alloc_err; int i; size_t bytesize; size_t ldbtsize; jobject jlockreq; db_lockop_t op; jobject jobj; jobject jlock; int completed; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) goto out0; if ((*jnienv)->GetArrayLength(jnienv, list) < offset + count) { report_exception(jnienv, "DbEnv.lock_vec array not large enough", 0, 0); goto out0; } bytesize = sizeof(DB_LOCKREQ) * count; if ((err = __os_malloc(dbenv, bytesize, &lockreq)) != 0) { verify_return(jnienv, err, 0); goto out0; } memset(lockreq, 0, bytesize); ldbtsize = sizeof(LOCKED_DBT) * count; if ((err = __os_malloc(dbenv, ldbtsize, &locked_dbts)) != 0) { verify_return(jnienv, err, 0); goto out1; } memset(lockreq, 0, ldbtsize); prereq = &lockreq[0]; /* fill in the lockreq array */ for (i = 0, prereq = &lockreq[0]; i < count; i++, prereq++) { jlockreq = (*jnienv)->GetObjectArrayElement(jnienv, list, offset + i); if (jlockreq == NULL) { report_exception(jnienv, "DbEnv.lock_vec list entry is null", 0, 0); goto out2; } op = (*jnienv)->GetIntField(jnienv, jlockreq, fid_DbLockRequest_op); prereq->op = op; switch (op) { case DB_LOCK_GET_TIMEOUT: /* Needed: mode, timeout, obj. Returned: lock. */ prereq->op = (*jnienv)->GetIntField(jnienv, jlockreq, fid_DbLockRequest_timeout); /* FALLTHROUGH */ case DB_LOCK_GET: /* Needed: mode, obj. Returned: lock. */ prereq->mode = (*jnienv)->GetIntField(jnienv, jlockreq, fid_DbLockRequest_mode); jobj = (*jnienv)->GetObjectField(jnienv, jlockreq, fid_DbLockRequest_obj); if ((err = locked_dbt_get(&locked_dbts[i], jnienv, dbenv, jobj, inOp)) != 0) goto out2; prereq->obj = &locked_dbts[i].javainfo->dbt; break; case DB_LOCK_PUT: /* Needed: lock. Ignored: mode, obj. */ jlock = (*jnienv)->GetObjectField(jnienv, jlockreq, fid_DbLockRequest_lock); if (!verify_non_null(jnienv, jlock)) goto out2; lockp = get_DB_LOCK(jnienv, jlock); if (!verify_non_null(jnienv, lockp)) goto out2; prereq->lock = *lockp; break; case DB_LOCK_PUT_ALL: case DB_LOCK_TIMEOUT: /* Needed: (none). Ignored: lock, mode, obj. */ break; case DB_LOCK_PUT_OBJ: /* Needed: obj. Ignored: lock, mode. */ jobj = (*jnienv)->GetObjectField(jnienv, jlockreq, fid_DbLockRequest_obj); if ((err = locked_dbt_get(&locked_dbts[i], jnienv, dbenv, jobj, inOp)) != 0) goto out2; prereq->obj = &locked_dbts[i].javainfo->dbt; break; default: report_exception(jnienv, "DbEnv.lock_vec bad op value", 0, 0); goto out2; } } err = dbenv->lock_vec(dbenv, locker, flags, lockreq, count, &failedreq); if (err == 0) completed = count; else completed = failedreq - lockreq; /* do post processing for any and all requests that completed */ for (i = 0; i < completed; i++) { op = lockreq[i].op; if (op == DB_LOCK_PUT) { /* * After a successful put, the DbLock can no longer * be used, so we release the storage related to it. */ jlockreq = (*jnienv)->GetObjectArrayElement(jnienv, list, i + offset); jlock = (*jnienv)->GetObjectField(jnienv, jlockreq, fid_DbLockRequest_lock); lockp = get_DB_LOCK(jnienv, jlock); __os_free(NULL, lockp); set_private_dbobj(jnienv, name_DB_LOCK, jlock, 0); } else if (op == DB_LOCK_GET) { /* * Store the lock that was obtained. * We need to create storage for it since * the lockreq array only exists during this * method call. */ alloc_err = __os_malloc(dbenv, sizeof(DB_LOCK), &lockp); if (!verify_return(jnienv, alloc_err, 0)) goto out2; *lockp = lockreq[i].lock; jlockreq = (*jnienv)->GetObjectArrayElement(jnienv, list, i + offset); jlock = create_default_object(jnienv, name_DB_LOCK); set_private_dbobj(jnienv, name_DB_LOCK, jlock, lockp); (*jnienv)->SetObjectField(jnienv, jlockreq, fid_DbLockRequest_lock, jlock); } } /* If one of the locks was not granted, build the exception now. */ if (err == DB_LOCK_NOTGRANTED && i < count) { jlockreq = (*jnienv)->GetObjectArrayElement(jnienv, list, i + offset); jobj = (*jnienv)->GetObjectField(jnienv, jlockreq, fid_DbLockRequest_obj); jlock = (*jnienv)->GetObjectField(jnienv, jlockreq, fid_DbLockRequest_lock); report_notgranted_exception(jnienv, "DbEnv.lock_vec incomplete", lockreq[i].op, lockreq[i].mode, jobj, jlock, i); } else verify_return(jnienv, err, 0); out2: /* Free the dbts that we have locked */ for (i = 0 ; i < (prereq - lockreq); i++) { if ((op = lockreq[i].op) == DB_LOCK_GET || op == DB_LOCK_PUT_OBJ) locked_dbt_put(&locked_dbts[i], jnienv, dbenv); } __os_free(dbenv, locked_dbts); out1: __os_free(dbenv, lockreq); out0: return;}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_lock_1put (JNIEnv *jnienv, jobject jthis, /*DbLock*/ jobject jlock){ int err; DB_ENV *dbenv; DB_LOCK *dblock; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return; dblock = get_DB_LOCK(jnienv, jlock); if (!verify_non_null(jnienv, dblock)) return; err = dbenv->lock_put(dbenv, dblock); if (verify_return(jnienv, err, 0)) { /* * After a successful put, the DbLock can no longer * be used, so we release the storage related to it * (allocated in DbEnv.lock_get()). */ __os_free(NULL, dblock); set_private_dbobj(jnienv, name_DB_LOCK, jlock, 0); }}JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_log_1archive (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err, len, i; char** ret; jclass stringClass; jobjectArray strarray; DB_ENV *dbenv; dbenv = get_DB_ENV(jnienv, jthis);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -