Example #1
0
static void smx_ctx_cojava_suspend(smx_context_t context)
{
  smx_context_t previous_context = context;
  unsigned long int i = cojava_process_index++;
  jobject next_coroutine;

  if (i < xbt_dynar_length(cojava_processes)) {
    smx_context_t next_context = SIMIX_process_get_context(xbt_dynar_get_as(
    cojava_processes,i, smx_process_t));
    my_current_context = next_context;
    XBT_DEBUG("Switching to %p",my_current_context);
    smx_ctx_cojava_t java_context = (smx_ctx_cojava_t)(next_context);
    if (!java_context->jprocess) {
      java_context->super.code(java_context->super.argc, java_context->super.argv);
      smx_ctx_cojava_create_coroutine(java_context);
    }
    else if (!java_context->bound) {
      java_context->bound = 1;
      smx_process_t process = SIMIX_process_self();
      (*global_env)->SetLongField(global_env, java_context->jprocess,
                                  jprocess_field_Process_bind,
                                  (intptr_t)process);
    }

    next_coroutine = java_context->jcoroutine;
  }
  else {
    //Give maestro the control back.
    next_coroutine = cojava_maestro_coroutine;
    my_current_context = maestro_context;
  }
  (*global_env)->CallStaticVoidMethod(global_env, coclass, coroutine_yieldTo, next_coroutine);
  my_current_context = previous_context;
}
Example #2
0
static void smx_ctx_cojava_runall(void)
{
  cojava_processes = SIMIX_process_get_runnable();
  smx_process_t process;
  if (!xbt_dynar_is_empty(cojava_processes)) {
    process = xbt_dynar_get_as(cojava_processes, 0, smx_process_t);
    cojava_process_index = 1;
    /* Execute the first process */
    smx_ctx_cojava_resume(SIMIX_process_get_context(process));
  }
}
Example #3
0
smx_context_t MSG_process_get_smx_ctx(msg_process_t process) {
  return SIMIX_process_get_context(process);
}