Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix memory leak when process killed. Fix bug where the simulation could crash when...
[simgrid.git] / src / jmsg_file.c
index 2b00cba..36650e2 100644 (file)
@@ -26,9 +26,14 @@ Java_org_simgrid_msg_File_open(JNIEnv *env, jobject jfile, jobject jstorage, job
   const char *storage = (*env)->GetStringUTFChars(env, jstorage, 0);
   const char *path = (*env)->GetStringUTFChars(env, jpath, 0);
   const char *mode = (*env)->GetStringUTFChars(env, jmode, 0);
-
-  msg_file_t file = MSG_file_open(storage, path, mode);
-
+  msg_file_t file;
+  xbt_ex_t e;
+  TRY {
+    file = MSG_file_open(storage, path, mode);
+  }
+  CATCH(e) {
+    xbt_ex_free(e);
+  }
   jfile_bind(env, jfile, file);
 
   (*env)->ReleaseStringUTFChars(env, jstorage, storage);
@@ -38,18 +43,28 @@ Java_org_simgrid_msg_File_open(JNIEnv *env, jobject jfile, jobject jstorage, job
 JNIEXPORT jlong JNICALL
 Java_org_simgrid_msg_File_read(JNIEnv *env, jobject jfile, jlong jsize, jlong jnmemb) {
   msg_file_t file = jfile_get_native(env, jfile);
-
-  size_t n = MSG_file_read(NULL,(size_t)jsize, (size_t)jnmemb, file);
-
+  size_t n;
+  xbt_ex_t e;
+  TRY {
+    n = MSG_file_read(NULL,(size_t)jsize, (size_t)jnmemb, file);
+  }
+  CATCH (e) {
+    xbt_ex_free(e);
+  }
   return (jlong)n;
 }
 
 JNIEXPORT jlong JNICALL
 Java_org_simgrid_msg_File_write(JNIEnv *env, jobject jfile, jlong jsize, jlong jnmemb) {
   msg_file_t file = jfile_get_native(env, jfile);
-
-  size_t n = MSG_file_write(NULL, (size_t)jsize, (size_t)jnmemb, file);
-
+  xbt_ex_t e;
+  size_t n;
+  TRY {
+     n = MSG_file_write(NULL, (size_t)jsize, (size_t)jnmemb, file);
+  }
+  CATCH(e) {
+    xbt_ex_free(e);
+  }
   return (jlong)n;
 }
 JNIEXPORT void JNICALL