From: Jonathan Rouzaud-Cornabas Date: Tue, 29 Jan 2013 14:47:17 +0000 (+0100) Subject: Add isendBounded for Task X-Git-Tag: v3_9_90~569^2~19^2~7 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/3802cdd96c23984d0ca4431322a3755c3ed9ef8c?ds=sidebyside Add isendBounded for Task --- diff --git a/org/simgrid/msg/Task.java b/org/simgrid/msg/Task.java index 59c103bcee..7cd0d8705b 100644 --- a/org/simgrid/msg/Task.java +++ b/org/simgrid/msg/Task.java @@ -225,7 +225,13 @@ public class Task { * Sends the task on the mailbox asynchronously */ public native Comm isend(String mailbox); + + /** + * Sends the task on the mailbox asynchronously (capping the sending rate to \a maxrate) + */ + public native Comm isendBounded(String mailbox, double maxrate); + /** * Starts listening for receiving a task from an asynchronous communication * @param mailbox diff --git a/src/jmsg_task.c b/src/jmsg_task.c index 67a87def81..5bce01217e 100644 --- a/src/jmsg_task.c +++ b/src/jmsg_task.c @@ -538,6 +538,47 @@ MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask)); return jcomm; } +JNIEXPORT jobject JNICALL +Java_org_simgrid_msg_Task_isendBounded(JNIEnv *env, jobject jtask, jstring jmailbox, jdouble maxrate) { + jclass comm_class; + + const char *mailbox; + + msg_task_t task; + + jobject jcomm; + msg_comm_t comm; + + comm_class = (*env)->FindClass(env, "org/simgrid/msg/Comm"); + + if (!comm_class) return NULL; + + jcomm = (*env)->NewObject(env, comm_class, jtask_method_Comm_constructor); + mailbox = (*env)->GetStringUTFChars(env, jmailbox, 0); + + task = jtask_to_native_task(jtask, env); + + if (!task) { + (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox); + (*env)->DeleteLocalRef(env, jcomm); + jxbt_throw_notbound(env, "task", jtask); + return NULL; + } + +MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask)); + comm = MSG_task_isend_bounded(task,mailbox,maxrate); + + (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (long)(comm)); + (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (long)(NULL)); + (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_FALSE); + + (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox); + + return jcomm; +} + + + static void msg_task_cancel_on_failed_dsend(void*t) { msg_task_t task = t; JNIEnv *env =get_current_thread_env(); diff --git a/src/jmsg_task.h b/src/jmsg_task.h index b0dfbbe631..bd411648f5 100644 --- a/src/jmsg_task.h +++ b/src/jmsg_task.h @@ -221,6 +221,14 @@ Java_org_simgrid_msg_Task_irecv(JNIEnv * env, jclass cls, jstring jmailbox); */ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_isend(JNIEnv *env, jobject jtask, jstring jmailbox); +/** + * Class org_simgrid_msg_Task + * Method isend + * Signature (Lorg/simgrid/msg/Task;Ljava/lang/String;)Lorg/simgrid/msg/Comm; + */ +JNIEXPORT jobject JNICALL +Java_org_simgrid_msg_Task_isendBounded(JNIEnv *env, jobject jtask, jstring jmailbox, jdouble maxrate); + /** * Class org_simgrid_msg_Task * Method dsend