+ //Create the "Process" object if needed.
+ if (context->super.argc > 0) {
+ (*(context->super.code))(context->super.argc, context->super.argv);
+ }
+ else {
+ smx_process_t process = SIMIX_process_self();
+ (*env)->SetLongField(env, context->jprocess, jprocess_field_Process_bind, (jlong)process);
+ }
+ xbt_assert((context->jprocess != NULL), "Process not created...");
+ //wait for the process to be able to begin
+ //TODO: Cache it
+ jfieldID jprocess_field_Process_startTime = jxbt_get_sfield(env, "org/simgrid/msg/Process", "startTime", "D");
+ jdouble startTime = (*env)->GetDoubleField(env, context->jprocess, jprocess_field_Process_startTime);
+ if (startTime > MSG_get_clock()) {
+ MSG_process_sleep(startTime - MSG_get_clock());
+ }