+/**
+ * \brief Creates and runs a new #smx_process_t hosting a JAVA thread
+ *
+ * Warning: this should only be used in libsimgrid4java, since it create
+ * a context with no code, which leads to segfaults in plain libsimgrid
+ */
+smx_process_t SIMIX_jprocess_create(const char *name, smx_host_t host,
+ void *data,
+ void *jprocess, void *jenv)
+{
+ smx_simdata_process_t simdata = xbt_new0(s_smx_simdata_process_t,1);
+ smx_process_t process = xbt_new0(s_smx_process_t,1);
+ smx_process_t self = NULL;
+
+ DEBUG5("jprocess_create(name=%s,host=%p,data=%p,jproc=%p,jenv=%p)",
+ name,host,data,jprocess,jenv);
+ xbt_assert0(host, "Invalid parameters");
+ /* Simulator Data */
+ simdata->s_host = host;
+ simdata->mutex = NULL;
+ simdata->cond = NULL;
+ simdata->argc = 0;
+ simdata->argv = NULL;
+
+ simdata->context = xbt_context_new(NULL, NULL, NULL,
+ SIMIX_process_cleanup, process,
+ /* argc/argv*/0,NULL);
+ /* Process structure */
+ process->name = xbt_strdup(name);
+ process->simdata = simdata;
+ process->data = data;
+ SIMIX_process_set_jprocess(process,jprocess);
+ SIMIX_process_set_jenv(process,jenv);
+
+ xbt_swag_insert(process, host->simdata->process_list);
+
+ /* *************** FIX du current_process !!! *************** */
+ self = simix_global->current_process;
+ xbt_context_start(process->simdata->context);
+ simix_global->current_process = self;
+
+ xbt_swag_insert(process,simix_global->process_list);
+ DEBUG2("Inserting %s(%s) in the to_run list",process->name,
+ host->name);
+ xbt_swag_insert(process,simix_global->process_to_run);
+
+ return process;
+}
+