JNIEXPORT void JNICALL
Java_simgrid_msg_MsgNative_selectContextFactory(JNIEnv * env, jclass class,jstring jname)
{
- int rv;
+ char *errmsg=NULL;
+ xbt_ex_t e;
- /* get the C string from the java string*/
- const char* name = (*env)->GetStringUTFChars(env, jname, 0);
-
- rv = xbt_context_select_factory(name);
-
+ /* get the C string from the java string*/
+ const char* name = (*env)->GetStringUTFChars(env, jname, 0);
+
+ TRY {
+ xbt_context_select_factory(name);
+ } CATCH(e) {
+ errmsg = xbt_strdup(e.msg);
+ xbt_ex_free(e);
+ }
+
(*env)->ReleaseStringUTFChars(env, jname, name);
- if(rv)
- jxbt_throw_native(env, xbt_strdup("xbt_select_context_factory() failed"));
+ if(errmsg) {
+ char *thrown = bprintf("xbt_select_context_factory() failed: %s",errmsg);
+ free(errmsg);
+ jxbt_throw_native(env, thrown);
+ }
}
JNIEXPORT void JNICALL
return 0; \r
}\r
\r
-int\r
+void\r
xbt_context_init_factory_by_name(xbt_context_factory_t* factory, const char* name)\r
{\r
if(!strcmp(name,"java"))\r
- {\r
- return xbt_ctx_java_factory_init(factory); \r
- }\r
+ xbt_ctx_java_factory_init(factory); \r
#ifdef CONTEXT_THREADS\r
else if(!strcmp(name,"thread")) \r
- {\r
- return xbt_ctx_thread_factory_init(factory); \r
- }\r
+ xbt_ctx_thread_factory_init(factory); \r
#elif !defined(WIN32)\r
else if(!strcmp(name,"sysv"))\r
- {\r
- return xbt_ctx_sysv_factory_init(factory); \r
- }\r
+ xbt_ctx_sysv_factory_init(factory); \r
#endif\r
- \r
- return EINVAL;\r
+\r
+ THROW1(not_found_error, 0,"Factory '%s' does not exist",name);\r
}\r
\r
/** Garbage collection\r
abort();\r
}\r
\r
-int\r
+void\r
xbt_ctx_java_factory_init(xbt_context_factory_t* factory)\r
{\r
/* context exception handlers */\r
(*factory)->finalize = xbt_ctx_java_factory_finalize;\r
(*factory)->create_maestro_context = xbt_ctx_java_factory_create_maestro_context;\r
(*factory)->name = "ctx_java_factory";\r
- \r
- return 0;\r
}\r
\r
static int \r
/**\r
* This function initialize a context factory from the name specified by the parameter\r
* name.\r
- * If successful the factory specified by the parameter factory is initialized and the\r
- * function returns 0. Otherwise the function returns the error code.\r
+ * If the factory cannot be found, an exception is raised.\r
*/\r
-int\r
+void\r
xbt_context_init_factory_by_name(xbt_context_factory_t* factory, const char* name);\r
\r
\r
/* All factories init */\r
-int xbt_ctx_thread_factory_init(xbt_context_factory_t* factory);\r
-int xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory);\r
-int xbt_ctx_java_factory_init(xbt_context_factory_t* factory);\r
+void xbt_ctx_thread_factory_init(xbt_context_factory_t* factory);\r
+void xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory);\r
+void xbt_ctx_java_factory_init(xbt_context_factory_t* factory);\r
\r
\r
\r
}\r
\r
\r
-int\r
+void\r
xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory)\r
{\r
/* context exception */\r
/* context exception handlers */\r
__xbt_ex_ctx = xbt_ctx_sysv_ex_ctx;\r
__xbt_ex_terminate = xbt_ctx_sysv_ex_terminate; \r
- \r
- return 0;\r
}\r
\r
static int \r
static void* \r
xbt_ctx_thread_wrapper(void* param);\r
\r
-int\r
+void\r
xbt_ctx_thread_factory_init(xbt_context_factory_t* factory)\r
{\r
*factory = xbt_new0(s_xbt_context_factory_t,1);\r
(*factory)->finalize = xbt_ctx_thread_factory_finalize;\r
(*factory)->create_maestro_context = xbt_ctx_thread_factory_create_master_context;\r
(*factory)->name = "ctx_thread_factory";\r
-\r
- return 0;\r
}\r
\r
static int\r