args.emplace_back("java");
for (int index = 1; index < argc; index++) {
auto jval = (jstring)env->GetObjectArrayElement(jargs, index - 1);
- const char* tmp = env->GetStringUTFChars(jval, nullptr);
- args.emplace_back(tmp);
- env->ReleaseStringUTFChars(jval, tmp);
+ jstring_wrapper tmp(env, jval);
+ args.emplace_back(tmp.value);
}
std::unique_ptr<char* []> argv(new char*[argc + 1]);
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_createEnvironment(JNIEnv* env, jclass, jstring jplatformFile)
{
- const char* platformFile = env->GetStringUTFChars(jplatformFile, nullptr);
-
+ jstring_wrapper platformFile(env, jplatformFile);
simgrid_load_platform(platformFile);
-
- env->ReleaseStringUTFChars(jplatformFile, platformFile);
}
JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Msg_environmentGetRoutingRoot(JNIEnv* env, jclass)
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_debug(JNIEnv* env, jclass, jstring js)
{
- const char* s = env->GetStringUTFChars(js, nullptr);
- XBT_DEBUG("%s", s);
- env->ReleaseStringUTFChars(js, s);
+ jstring_wrapper s(env, js);
+ XBT_DEBUG("%s", s.value);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_verb(JNIEnv* env, jclass, jstring js)
{
- const char* s = env->GetStringUTFChars(js, nullptr);
- XBT_VERB("%s", s);
- env->ReleaseStringUTFChars(js, s);
+ jstring_wrapper s(env, js);
+ XBT_VERB("%s", s.value);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_info(JNIEnv* env, jclass, jstring js)
{
- const char* s = env->GetStringUTFChars(js, nullptr);
- XBT_INFO("%s", s);
- env->ReleaseStringUTFChars(js, s);
+ jstring_wrapper s(env, js);
+ XBT_INFO("%s", s.value);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_warn(JNIEnv* env, jclass, jstring js)
{
- const char* s = env->GetStringUTFChars(js, nullptr);
- XBT_WARN("%s", s);
- env->ReleaseStringUTFChars(js, s);
+ jstring_wrapper s(env, js);
+ XBT_WARN("%s", s.value);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_error(JNIEnv* env, jclass, jstring js)
{
- const char* s = env->GetStringUTFChars(js, nullptr);
- XBT_ERROR("%s", s);
- env->ReleaseStringUTFChars(js, s);
+ jstring_wrapper s(env, js);
+ XBT_ERROR("%s", s.value);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_critical(JNIEnv* env, jclass, jstring js)
{
- const char* s = env->GetStringUTFChars(js, nullptr);
- XBT_CRITICAL("%s", s);
- env->ReleaseStringUTFChars(js, s);
+ jstring_wrapper s(env, js);
+ XBT_CRITICAL("%s", s.value);
}
static void java_main(int argc, char* argv[]);
JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_deployApplication(JNIEnv* env, jclass, jstring jdeploymentFile)
{
- const char* deploymentFile = env->GetStringUTFChars(jdeploymentFile, nullptr);
+ jstring_wrapper deploymentFile(env, jdeploymentFile);
simgrid_register_default(java_main);
simgrid_load_deployment(deploymentFile);
jxbt_throw_notbound(env, "as", jas);
return nullptr;
}
- const char* name = env->GetStringUTFChars(static_cast<jstring>(jname), nullptr);
+ jstring_wrapper name(env, static_cast<jstring>(jname));
const char* property = sg_zone_get_property_value(as, name);
if (not property) {
jobject jproperty = env->NewStringUTF(property);
- env->ReleaseStringUTFChars(static_cast<jstring>(jname), name);
-
return jproperty;
}
jxbt_throw_null(env, "No host can have a null name");
return nullptr;
}
- const char* name = env->GetStringUTFChars(jname, nullptr);
+ jstring_wrapper name(env, jname);
/* get the host by name (the hosts are created during the grid resolution) */
sg_host_t host = sg_host_by_name(name);
if (not host) { /* invalid name */
jxbt_throw_host_not_found(env, name);
- env->ReleaseStringUTFChars(jname, name);
return nullptr;
}
- env->ReleaseStringUTFChars(jname, name);
if (not host->extension(JAVA_HOST_LEVEL)) { /* native host not associated yet with java host */
/* Instantiate a new java host */
jxbt_throw_notbound(env, "host", jhost);
return nullptr;
}
- const char* name = env->GetStringUTFChars((jstring)jname, nullptr);
+ jstring_wrapper name(env, (jstring)jname);
const char* property = sg_host_get_property_value(host, name);
if (not property) {
jobject jproperty = env->NewStringUTF(property);
- env->ReleaseStringUTFChars((jstring) jname, name);
-
return jproperty;
}
jxbt_throw_notbound(env, "host", jhost);
return;
}
- const char* name = env->GetStringUTFChars((jstring)jname, nullptr);
- const char* value_java = env->GetStringUTFChars((jstring)jvalue, nullptr);
+ jstring_wrapper name(env, (jstring)jname);
+ jstring_wrapper value_java(env, (jstring)jvalue);
const char* value = xbt_strdup(value_java);
sg_host_set_property_value(host, name, value);
-
- env->ReleaseStringUTFChars((jstring) jvalue, value_java);
- env->ReleaseStringUTFChars((jstring) jname, name);
}
JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Host_isOn(JNIEnv * env, jobject jhost)
JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_setAsyncMailbox(JNIEnv * env, jclass cls_arg, jobject jname)
{
- const char* name = env->GetStringUTFChars((jstring)jname, nullptr);
+ jstring_wrapper name(env, (jstring)jname);
sg_mailbox_set_receiver(name);
- env->ReleaseStringUTFChars((jstring) jname, name);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_updateAllEnergyConsumptions(JNIEnv* env, jclass cls)
jxbt_throw_notbound(env, "process", jprocess);
return nullptr;
}
- const char* name = env->GetStringUTFChars((jstring)jname, nullptr);
+ jstring_wrapper name(env, (jstring)jname);
const char* property = actor->get_property(name);
if (not property)
jobject jproperty = env->NewStringUTF(property);
- env->ReleaseStringUTFChars((jstring)jname, name);
-
return jproperty;
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_create(JNIEnv * env, jobject jtask, jstring jname,
jdouble jflopsAmount, jdouble jbytesAmount)
{
- const char *name = nullptr; /* the name of the task */
-
- if (jname)
- name = env->GetStringUTFChars(jname, nullptr);
- msg_task_t task = MSG_task_create(name, jflopsAmount, jbytesAmount, jtask);
- if (jname)
- env->ReleaseStringUTFChars(jname, name);
+ jstring_wrapper task_name(env, jname);
+ msg_task_t task = MSG_task_create(task_name, jflopsAmount, jbytesAmount, jtask);
/* bind & store the task */
jtask_bind(jtask, task, env);
env->ReleaseDoubleArrayElements(jmessageSizes_arg, jmessageSizes, 0);
/* get the C string from the java string */
- const char* name = env->GetStringUTFChars(jname, nullptr);
+ jstring_wrapper name(env, jname);
msg_task_t task = MSG_parallel_task_create(name, host_count, hosts, computeDurations, messageSizes, jtask);
- env->ReleaseStringUTFChars(jname, name);
/* associate the java task object and the native task */
jtask_bind(jtask, task, env);
jxbt_throw_notbound(env, "task", jtask);
return;
}
- const char* name = env->GetStringUTFChars((jstring)jname, nullptr);
+ jstring_wrapper name(env, static_cast<jstring>(jname));
env->SetObjectField(jtask, jtask_field_Task_name, jname);
MSG_task_set_name(task, name);
- env->ReleaseStringUTFChars((jstring) jname, name);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setPriority(JNIEnv * env, jobject jtask, jdouble priority)
/* Add a global ref into the Ctask so that the receiver can use it */
MSG_task_set_data(task, env->NewGlobalRef(jtask));
- const char* alias = env->GetStringUTFChars(jalias, nullptr);
+ jstring_wrapper alias(env, jalias);
msg_error_t res = MSG_task_send_with_timeout_bounded(task, alias, jtimeout, maxrate);
- env->ReleaseStringUTFChars(jalias, alias);
if (res != MSG_OK)
jmsg_throw_status(env, res);
{
msg_task_t task = nullptr;
- const char* alias = env->GetStringUTFChars(jalias, nullptr);
+ jstring_wrapper alias(env, jalias);
msg_error_t rv;
if (not simgrid::ForcefulKillException::try_n_catch(
[&rv, &task, &alias, &jtimeout]() { rv = MSG_task_receive_with_timeout(&task, alias, (double)jtimeout); })) {
jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", "Process killed");
}
- env->ReleaseStringUTFChars(jalias, alias);
if (env->ExceptionOccurred())
return nullptr;
if (rv != MSG_OK) {
return nullptr;
}
- const char* mailbox = env->GetStringUTFChars(jmailbox, nullptr);
+ jstring_wrapper mailbox(env, jmailbox);
msg_comm_t comm = MSG_task_irecv(task, mailbox);
- env->ReleaseStringUTFChars(jmailbox, mailbox);
env->SetLongField(jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
{
msg_task_t task = nullptr;
- const char* alias = env->GetStringUTFChars(jalias, nullptr);
+ jstring_wrapper alias(env, jalias);
msg_error_t res = MSG_task_receive_with_timeout_bounded(&task, alias, jtimeout, rate);
if (env->ExceptionOccurred())
return nullptr;
env->DeleteGlobalRef(jtask_global);
MSG_task_set_data(task, nullptr);
- env->ReleaseStringUTFChars(jalias, alias);
-
return (jobject) jtask_local;
}
return nullptr;
}
- const char* mailbox = env->GetStringUTFChars(jmailbox, nullptr);
+ jstring_wrapper mailbox(env, jmailbox);
msg_comm_t comm = MSG_task_irecv_bounded(task, mailbox, rate);
- env->ReleaseStringUTFChars(jmailbox, mailbox);
env->SetLongField(jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
return nullptr;
jobject jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
- const char* mailbox = env->GetStringUTFChars(jmailbox, nullptr);
+ jstring_wrapper mailbox(env, jmailbox);
msg_task_t task = jtask_to_native(jtask, env);
if (not task) {
- env->ReleaseStringUTFChars(jmailbox, mailbox);
env->DeleteLocalRef(jcomm);
jxbt_throw_notbound(env, "task", jtask);
return nullptr;
env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(nullptr));
env->SetBooleanField(jcomm, jtask_field_Comm_receiving, JNI_FALSE);
- env->ReleaseStringUTFChars(jmailbox, mailbox);
-
return jcomm;
}
msg_task_t task;
jobject jcomm;
msg_comm_t comm;
- const char *mailbox;
jclass comm_class = env->FindClass("org/simgrid/msg/Comm");
if (not comm_class)
return nullptr;
jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
- mailbox = env->GetStringUTFChars(jmailbox, nullptr);
+ jstring_wrapper mailbox(env, jmailbox);
task = jtask_to_native(jtask, env);
if (not task) {
- env->ReleaseStringUTFChars(jmailbox, mailbox);
env->DeleteLocalRef(jcomm);
jxbt_throw_notbound(env, "task", jtask);
return nullptr;
env->SetLongField(jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(nullptr));
env->SetBooleanField(jcomm, jtask_field_Comm_receiving, JNI_FALSE);
- env->ReleaseStringUTFChars(jmailbox, mailbox);
-
return jcomm;
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_dsend(JNIEnv * env, jobject jtask, jstring jalias)
{
- const char* alias = env->GetStringUTFChars(jalias, nullptr);
+ jstring_wrapper alias(env, jalias);
msg_task_t task = jtask_to_native(jtask, env);
if (not task) {
- env->ReleaseStringUTFChars(jalias, alias);
jxbt_throw_notbound(env, "task", jtask);
return;
}
/* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
MSG_task_set_data(task, env->NewGlobalRef(jtask));
MSG_task_dsend(task, alias, msg_task_cancel_on_failed_dsend);
-
- env->ReleaseStringUTFChars(jalias, alias);
}
JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_dsendBounded(JNIEnv * env, jobject jtask, jstring jalias,
jdouble maxrate)
{
- const char* alias = env->GetStringUTFChars(jalias, nullptr);
+ jstring_wrapper alias(env, jalias);
msg_task_t task = jtask_to_native(jtask, env);
if (not task) {
- env->ReleaseStringUTFChars(jalias, alias);
jxbt_throw_notbound(env, "task", jtask);
return;
}
/* Pass a global ref to the Jtask into the Ctask so that the receiver can use it */
MSG_task_set_data(task, env->NewGlobalRef(jtask));
MSG_task_dsend_bounded(task, alias, msg_task_cancel_on_failed_dsend, maxrate);
-
- env->ReleaseStringUTFChars(jalias, alias);
}
JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Task_listen(JNIEnv * env, jclass cls, jstring jalias)
{
- const char* alias = env->GetStringUTFChars(jalias, nullptr);
- int rv = MSG_task_listen(alias);
- env->ReleaseStringUTFChars(jalias, alias);
-
- return (jboolean) rv;
+ jstring_wrapper alias(env, jalias);
+ return (jboolean)MSG_task_listen(alias);
}
JNIEXPORT jint JNICALL Java_org_simgrid_msg_Task_listenFrom(JNIEnv * env, jclass cls, jstring jalias)
{
- const char* alias = env->GetStringUTFChars(jalias, nullptr);
- int rv = MSG_task_listen_from(alias);
- env->ReleaseStringUTFChars(jalias, alias);
-
- return (jint) rv;
+ jstring_wrapper alias(env, jalias);
+ return (jint)MSG_task_listen_from(alias);
}
{
sg_host_t host = jhost_get_native(env, jHost);
- const char* name = env->GetStringUTFChars(jname, nullptr);
+ jstring_wrapper name(env, jname);
sg_vm_t vm = sg_vm_create_migratable(host, name, static_cast<int>(coreAmount), static_cast<int>(jramsize),
static_cast<int>(jmig_netspeed), static_cast<int>(jdp_intensity));
- env->ReleaseStringUTFChars(jname, name);
jvm_bind(env, jVm, vm);
jVm = env->NewGlobalRef(jVm);
jxbt_throw_null(env, "No VM can have a null name");
return nullptr;
}
- const char* name = env->GetStringUTFChars(jname, nullptr);
+ jstring_wrapper name(env, jname);
/* get the VM by name (VMs are just special hosts, unfortunately) */
auto const* host = sg_host_by_name(name);
if (not host) { /* invalid name */
jxbt_throw_host_not_found(env, name);
- env->ReleaseStringUTFChars(jname, name);
return nullptr;
}
- env->ReleaseStringUTFChars(jname, name);
return static_cast<jobject>(host->extension(JAVA_HOST_LEVEL));
}
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "jtrace.h"
+#include "jxbt_utilities.hpp"
#include "simgrid/instr.h"
/* Shut up some errors in eclipse online compiler. I wish such a pimple wouldn't be needed */
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostStateDeclare(JNIEnv * env, jclass cls, jstring js)
{
- const char* s = env->GetStringUTFChars(js, nullptr);
+ jstring_wrapper s(env, js);
TRACE_host_state_declare(s);
- env->ReleaseStringUTFChars(js, s);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostStateDeclareValue (JNIEnv *env, jclass cls, jstring js_state,
jstring js_value, jstring js_color)
{
- const char* state = env->GetStringUTFChars(js_state, nullptr);
- const char* value = env->GetStringUTFChars(js_value, nullptr);
- const char* color = env->GetStringUTFChars(js_color, nullptr);
+ jstring_wrapper state(env, js_state);
+ jstring_wrapper value(env, js_value);
+ jstring_wrapper color(env, js_color);
TRACE_host_state_declare_value(state, value, color);
-
- env->ReleaseStringUTFChars(js_state, state);
- env->ReleaseStringUTFChars(js_value, value);
- env->ReleaseStringUTFChars(js_color, color);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostSetState (JNIEnv *env, jclass cls, jstring js_host,
jstring js_state, jstring js_value)
{
- const char* host = env->GetStringUTFChars(js_host, nullptr);
- const char* state = env->GetStringUTFChars(js_state, nullptr);
- const char* value = env->GetStringUTFChars(js_value, nullptr);
+ jstring_wrapper host(env, js_host);
+ jstring_wrapper state(env, js_state);
+ jstring_wrapper value(env, js_value);
TRACE_host_set_state(host, state, value);
-
- env->ReleaseStringUTFChars(js_host, host);
- env->ReleaseStringUTFChars(js_state, state);
- env->ReleaseStringUTFChars(js_value, value);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostPushState (JNIEnv *env, jclass cls, jstring js_host,
jstring js_state, jstring js_value)
{
- const char* host = env->GetStringUTFChars(js_host, nullptr);
- const char* state = env->GetStringUTFChars(js_state, nullptr);
- const char* value = env->GetStringUTFChars(js_value, nullptr);
+ jstring_wrapper host(env, js_host);
+ jstring_wrapper state(env, js_state);
+ jstring_wrapper value(env, js_value);
TRACE_host_push_state(host, state, value);
-
- env->ReleaseStringUTFChars(js_host, host);
- env->ReleaseStringUTFChars(js_state, state);
- env->ReleaseStringUTFChars(js_value, value);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostPopState (JNIEnv *env, jclass cls, jstring js_host,
jstring js_state)
{
- const char* host = env->GetStringUTFChars(js_host, nullptr);
- const char* state = env->GetStringUTFChars(js_state, nullptr);
+ jstring_wrapper host(env, js_host);
+ jstring_wrapper state(env, js_state);
TRACE_host_pop_state(host, state);
-
- env->ReleaseStringUTFChars(js_host, host);
- env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableDeclare (JNIEnv *env, jclass cls, jstring js_state)
{
- const char* state = env->GetStringUTFChars(js_state, nullptr);
+ jstring_wrapper state(env, js_state);
TRACE_host_variable_declare(state);
- env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableSet (JNIEnv *env, jclass cls, jstring js_host,
jstring js_state, jdouble value)
{
- const char* host = env->GetStringUTFChars(js_host, nullptr);
- const char* state = env->GetStringUTFChars(js_state, nullptr);
+ jstring_wrapper host(env, js_host);
+ jstring_wrapper state(env, js_state);
TRACE_host_variable_set(host, state, value);
-
- env->ReleaseStringUTFChars(js_host, host);
- env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableSub (JNIEnv *env, jclass cls, jstring js_host,
jstring js_state, jdouble value)
{
- const char* host = env->GetStringUTFChars(js_host, nullptr);
- const char* state = env->GetStringUTFChars(js_state, nullptr);
+ jstring_wrapper host(env, js_host);
+ jstring_wrapper state(env, js_state);
TRACE_host_variable_sub(host, state, value);
-
- env->ReleaseStringUTFChars(js_host, host);
- env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_vmVariableDeclare (JNIEnv *env, jclass cls, jstring js_state)
{
- const char* state = env->GetStringUTFChars(js_state, nullptr);
+ jstring_wrapper state(env, js_state);
TRACE_vm_variable_declare(state);
-
- env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_vmVariableSet (JNIEnv *env, jclass cls, jstring js_vm,
jstring js_state, jdouble value)
{
- const char* vm = env->GetStringUTFChars(js_vm, nullptr);
- const char* state = env->GetStringUTFChars(js_state, nullptr);
+ jstring_wrapper vm(env, js_vm);
+ jstring_wrapper state(env, js_state);
TRACE_vm_variable_set(vm, state, value);
-
- env->ReleaseStringUTFChars(js_vm, vm);
- env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_hostVariableAdd (JNIEnv *env, jclass cls, jstring js_host,
jstring js_state, jdouble value)
{
- const char* host = env->GetStringUTFChars(js_host, nullptr);
- const char* state = env->GetStringUTFChars(js_state, nullptr);
+ jstring_wrapper host(env, js_host);
+ jstring_wrapper state(env, js_state);
TRACE_host_variable_set(host, state, value);
-
- env->ReleaseStringUTFChars(js_host, host);
- env->ReleaseStringUTFChars(js_state, state);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_linkVariableDeclare (JNIEnv *env, jclass cls, jstring jvar) {
- const char* variable = env->GetStringUTFChars(jvar, nullptr);
+ jstring_wrapper variable(env, jvar);
TRACE_link_variable_declare (variable);
- env->ReleaseStringUTFChars(jvar, variable);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_linkVariableDeclareWithColor (JNIEnv *env, jclass cls, jstring jvar, jstring jcolor) {
- const char* variable = env->GetStringUTFChars(jvar, nullptr);
- const char* color = env->GetStringUTFChars(jcolor, nullptr);
+ jstring_wrapper variable(env, jvar);
+ jstring_wrapper color(env, jcolor);
TRACE_link_variable_declare_with_color(variable,color);
- env->ReleaseStringUTFChars(jvar, variable);
- env->ReleaseStringUTFChars(jcolor, color);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_linkVariableSet (JNIEnv *env, jclass cls, jstring jlink, jstring jvar, jdouble jvalue) {
- const char* link = env->GetStringUTFChars(jlink, nullptr);
- const char* variable = env->GetStringUTFChars(jvar, nullptr);
+ jstring_wrapper link(env, jlink);
+ jstring_wrapper variable(env, jvar);
TRACE_link_variable_set(link, variable, jvalue);
- env->ReleaseStringUTFChars(jlink, link);
- env->ReleaseStringUTFChars(jvar, variable);
}
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_linkSrcDstVariableSet
(JNIEnv *env, jclass cls, jstring jsrc, jstring jdst, jstring jvar, jdouble jval)
{
- const char* src = env->GetStringUTFChars(jsrc, nullptr);
- const char* dst = env->GetStringUTFChars(jdst, nullptr);
- const char* variable = env->GetStringUTFChars(jvar, nullptr);
+ jstring_wrapper src(env, jsrc);
+ jstring_wrapper dst(env, jdst);
+ jstring_wrapper variable(env, jvar);
TRACE_link_srcdst_variable_set(src,dst,variable, jval);
- env->ReleaseStringUTFChars(jsrc, src);
- env->ReleaseStringUTFChars(jdst, dst);
- env->ReleaseStringUTFChars(jvar, variable);
}
/* Missing calls
JNIEXPORT void JNICALL Java_org_simgrid_trace_Trace_linkVariableAdd(JNIEnv *, jclass, jstring, jstring, jdouble)
if (not id) {
jmethodID tostr_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
- auto jclassname = (jstring)env->CallObjectMethod(cls, tostr_id, nullptr);
- const char* classname = env->GetStringUTFChars(jclassname, nullptr);
+ auto jclassname = (jstring)env->CallObjectMethod(cls, tostr_id, nullptr);
+ jstring_wrapper classname(env, jclassname);
+ auto msg = std::string("Cannot find method") + name + "(" + signature + ") in " + classname.value;
- env->ReleaseStringUTFChars(jclassname, classname);
-
- jxbt_throw_jni(env, std::string("Cannot find method") + name + "(" + signature + ") in " + classname);
+ jxbt_throw_jni(env, msg);
return nullptr;
}
if (not id) {
jmethodID tostr_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
auto jclassname = (jstring)env->CallObjectMethod(cls, tostr_id, nullptr);
- const char* classname = env->GetStringUTFChars(jclassname, nullptr);
-
- env->ReleaseStringUTFChars(jclassname, classname);
+ jstring_wrapper classname(env, jclassname);
+ auto msg = std::string("Cannot find static method") + name + "(" + signature + ") in " + classname.value;
- jxbt_throw_jni(env, std::string("Cannot find static method") + name + "(" + signature + ") in " + classname);
+ jxbt_throw_jni(env, msg);
return nullptr;
}
/**Thrown when a task is canceled */
void jxbt_throw_task_cancelled(JNIEnv* env, const std::string& details);
+class jstring_wrapper {
+ JNIEnv* env_ = nullptr;
+ jstring jstr_ = nullptr;
+
+public:
+ const char* value = nullptr;
+
+ jstring_wrapper(JNIEnv* env, jstring jstr) : env_(env), jstr_(jstr)
+ {
+ if (jstr != nullptr)
+ value = env_->GetStringUTFChars(jstr_, nullptr);
+ }
+ void reset(JNIEnv* env, jstring jstr)
+ {
+ if (jstr_ != nullptr)
+ env_->ReleaseStringUTFChars(jstr_, value);
+ env_ = env;
+ jstr_ = jstr;
+ if (jstr != nullptr)
+ value = env_->GetStringUTFChars(jstr_, nullptr);
+ }
+ ~jstring_wrapper()
+ {
+ if (jstr_ != nullptr)
+ env_->ReleaseStringUTFChars(jstr_, value);
+ }
+ operator const char*() const { return value; }
+ operator const std::string() const { return std::string(value); }
+};
+
#endif