Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fixed the java's context interface to build with the context module layout [Cristian]
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 17 Aug 2009 09:24:47 +0000 (09:24 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 17 Aug 2009 09:24:47 +0000 (09:24 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6564 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/include/simix/datatypes.h
src/java/jmsg.c
src/java/jmsg_process.c
src/java/jmsg_process.h
src/simix/private.h
src/simix/smx_context_java.c
src/simix/smx_context_java.h
src/simix/smx_process.c

index 859727e..0ac2202 100644 (file)
@@ -50,5 +50,6 @@ SG_BEGIN_DECL()
      typedef struct s_smx_process *smx_process_t;
 /** @} */
 
+     typedef struct s_smx_context *smx_context_t;
 SG_END_DECL()
 #endif
index f16f2c7..0fa342b 100644 (file)
@@ -12,7 +12,7 @@
 #include "msg/msg.h"
 #include "msg/private.h"
 #include "simix/private.h"
-#include "xbt/xbt_context_java.h"
+#include "simix/smx_context_java.h"
 
 #include "jmsg_process.h"
 #include "jmsg_host.h"
@@ -51,8 +51,8 @@ JNIEnv *get_current_thread_env(void)
 
 static jobject native_to_java_process(m_process_t process)
 {
-  return ((xbt_ctx_java_t)
-          (process->simdata->s_process->simdata->context))->jprocess;
+  return ((smx_ctx_java_t)
+          (process->simdata->s_process->context))->jprocess;
 }
 
 
@@ -1021,7 +1021,7 @@ Java_simgrid_msg_MsgNative_processExit(JNIEnv * env, jclass cls,
     return;
   }
 
-  xbt_context_stop(0);
+  SIMIX_context_stop(0);
 }
 
 JNIEXPORT void JNICALL
@@ -1097,7 +1097,7 @@ Java_simgrid_msg_MsgNative_selectContextFactory(JNIEnv * env, jclass class,
   const char *name = (*env)->GetStringUTFChars(env, jname, 0);
 
   TRY {
-    xbt_context_select_factory(name);
+    SIMIX_context_select_factory(name);
   } CATCH(e) {
     errmsg = xbt_strdup(e.msg);
     xbt_ex_free(e);
index 60c3464..4c774e8 100644 (file)
@@ -14,7 +14,7 @@
 #include "jmsg.h"
 #include "jxbt_utilities.h"
 
-#include "xbt/xbt_context_java.h"
+#include "simix/smx_context_java.h"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
 
@@ -184,7 +184,7 @@ jboolean jprocess_is_valid(jobject jprocess, JNIEnv * env)
   return (*env)->GetLongField(env, jprocess, id) ? JNI_TRUE : JNI_FALSE;
 }
 
-void jprocess_schedule(xbt_context_t context)
+void jprocess_schedule(smx_context_t context)
 {
   JNIEnv *env;
   jmethodID id;
@@ -196,12 +196,12 @@ void jprocess_schedule(xbt_context_t context)
   if (!id)
     return;
 
-  (*env)->CallVoidMethod(env, ((xbt_ctx_java_t) context)->jprocess, id);
+  (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);
 }
 
 
 
-void jprocess_unschedule(xbt_context_t context)
+void jprocess_unschedule(smx_context_t context)
 {
   JNIEnv *env;
   jmethodID id;
@@ -214,5 +214,5 @@ void jprocess_unschedule(xbt_context_t context)
   if (!id)
     return;
 
-  (*env)->CallVoidMethod(env, ((xbt_ctx_java_t) context)->jprocess, id);
+  (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);
 }
index fda48a0..5056c45 100644 (file)
@@ -15,7 +15,7 @@
 
 #include <jni.h>
 #include "msg/msg.h"
-#include "xbt/context.h"
+#include "simix/simix.h"
 
 /**
  * This function returns a global reference to the  java process instance 
@@ -238,9 +238,9 @@ void jprocess_signal_cond(jobject jprocess, JNIEnv * env);
  */
 void jprocess_wait_cond(jobject jprocess, JNIEnv * env);
 
-void jprocess_schedule(xbt_context_t context);
+void jprocess_schedule(smx_context_t context);
 
-void jprocess_unschedule(xbt_context_t context);
+void jprocess_unschedule(smx_context_t context);
 
 
 #endif /* !MSG_JPROCESS_H */
index da4b964..4fd9db7 100644 (file)
@@ -54,9 +54,7 @@ extern SIMIX_Global_t simix_global;
 
 /******************************** Process *************************************/
 
-typedef struct s_smx_context *smx_context_t;
-
-/** @brief Process datatype
+/** @brief Process datatype 
     @ingroup m_datatypes_management_details @{ */
      typedef struct s_smx_process {
        s_xbt_swag_hookup_t process_hookup;
index b40d5e5..ed5758b 100644 (file)
@@ -10,8 +10,8 @@
 
 #include "xbt/function_types.h"
 #include "xbt/ex_interface.h"
-#include "xbt/xbt_context_private.h"
-#include "xbt/xbt_context_java.h"
+#include "private.h"
+#include "smx_context_java.h"
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(jmsg, "MSG for Java(TM)");
 
@@ -21,45 +21,30 @@ static ex_ctx_t *xbt_ctx_java_ex_ctx(void);
 /* callback: termination */
 static void xbt_ctx_java_ex_terminate(xbt_ex_t * e);
 
-static xbt_context_t
-xbt_ctx_java_factory_create_context(const char *name, xbt_main_func_t code,
-                                    void_f_pvoid_t startup_func,
-                                    void *startup_arg,
-                                    void_f_pvoid_t cleanup_func,
-                                    void *cleanup_arg, int argc, char **argv);
+static smx_context_t
+smx_ctx_java_factory_create_context(xbt_main_func_t code, int argc, char** argv, 
+                                    void_f_pvoid_t cleanup_func, void* cleanup_arg);
 
-static int
-xbt_ctx_java_factory_create_maestro_context(xbt_context_t * maestro);
+static smx_context_t smx_ctx_java_factory_create_maestro_context(void);
 
-static int xbt_ctx_java_factory_finalize(xbt_context_factory_t * factory);
+static int smx_ctx_java_factory_finalize(smx_context_factory_t * factory);
 
-static void xbt_ctx_java_free(xbt_context_t context);
+static void smx_ctx_java_free(smx_context_t context);
 
-static void xbt_ctx_java_kill(xbt_context_t context);
+static void smx_ctx_java_start(smx_context_t context);
 
-static void xbt_ctx_java_schedule(xbt_context_t context);
+static void smx_ctx_java_stop(smx_context_t context);
 
-static void xbt_ctx_java_yield(void);
+static void smx_ctx_java_suspend(smx_context_t context);
 
-static void xbt_ctx_java_start(xbt_context_t context);
-
-static void xbt_ctx_java_stop(int exit_code);
-
-static void xbt_ctx_java_swap(xbt_context_t context);
-
-static void xbt_ctx_java_schedule(xbt_context_t context);
-
-static void xbt_ctx_java_yield(void);
-
-static void xbt_ctx_java_suspend(xbt_context_t context);
-
-static void xbt_ctx_java_resume(xbt_context_t context);
+static void
+  smx_ctx_java_resume(smx_context_t old_context, smx_context_t new_context);
 
 
 /* callback: context fetching */
 static ex_ctx_t *xbt_ctx_java_ex_ctx(void)
 {
-  return current_context->exception;
+  return simix_global->current_process->context->exception;
 }
 
 /* callback: termination */
@@ -69,75 +54,66 @@ static void xbt_ctx_java_ex_terminate(xbt_ex_t * e)
   abort();
 }
 
-void xbt_ctx_java_factory_init(xbt_context_factory_t * factory)
+void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory)
 {
   /* context exception handlers */
   __xbt_ex_ctx = xbt_ctx_java_ex_ctx;
   __xbt_ex_terminate = xbt_ctx_java_ex_terminate;
 
   /* instantiate the context factory */
-  *factory = xbt_new0(s_xbt_context_factory_t, 1);
-
-  (*factory)->create_context = xbt_ctx_java_factory_create_context;
-  (*factory)->finalize = xbt_ctx_java_factory_finalize;
-  (*factory)->create_maestro_context = xbt_ctx_java_factory_create_maestro_context;
-  (*factory)->free = xbt_ctx_java_free;
-  (*factory)->kill = xbt_ctx_java_kill;
-  (*factory)->schedule = xbt_ctx_java_schedule;
-  (*factory)->yield = xbt_ctx_java_yield;
-  (*factory)->start = xbt_ctx_java_start;
-  (*factory)->stop = xbt_ctx_java_stop;
+  *factory = xbt_new0(s_smx_context_factory_t, 1);
+
+  (*factory)->create_context = smx_ctx_java_factory_create_context;
+  (*factory)->finalize = smx_ctx_java_factory_finalize;
+  (*factory)->create_maestro_context = smx_ctx_java_factory_create_maestro_context;
+  (*factory)->free = smx_ctx_java_free;
+  (*factory)->start = smx_ctx_java_start;
+  (*factory)->stop = smx_ctx_java_stop;
+  (*factory)->suspend = smx_ctx_java_suspend;
+  (*factory)->resume = smx_ctx_java_resume;
+
   (*factory)->name = "ctx_java_factory";
 }
 
-static int
-xbt_ctx_java_factory_create_maestro_context(xbt_context_t * maestro)
+static smx_context_t smx_ctx_java_factory_create_maestro_context(void)
 {
-  xbt_ctx_java_t context = xbt_new0(s_xbt_ctx_java_t, 1);
+  smx_ctx_java_t context = xbt_new0(s_smx_ctx_java_t, 1);
 
   context->exception = xbt_new(ex_ctx_t, 1);
   XBT_CTX_INITIALIZE(context->exception);
 
-  *maestro = (xbt_context_t) context;
-
-  return 0;
+  return (smx_context_t) context;
 }
 
-static int xbt_ctx_java_factory_finalize(xbt_context_factory_t * factory)
+static int smx_ctx_java_factory_finalize(smx_context_factory_t * factory)
 {
-  free(maestro_context->exception);
+  /*FIXME: free(maestro_context->exception);*/
   free(*factory);
   *factory = NULL;
 
   return 0;
 }
 
-static xbt_context_t
-xbt_ctx_java_factory_create_context(const char *name, xbt_main_func_t code,
-                                    void_f_pvoid_t startup_func,
-                                    void *startup_arg,
-                                    void_f_pvoid_t cleanup_func,
-                                    void *cleanup_arg, int argc, char **argv)
+static smx_context_t
+smx_ctx_java_factory_create_context(xbt_main_func_t code, int argc, char** argv, 
+                                    void_f_pvoid_t cleanup_func, void* cleanup_arg)
 {
-  xbt_ctx_java_t context = xbt_new0(s_xbt_ctx_java_t, 1);
+  smx_ctx_java_t context = xbt_new0(s_smx_ctx_java_t, 1);
 
-  context->name = xbt_strdup(name);
   context->cleanup_func = cleanup_func;
   context->cleanup_arg = cleanup_arg;
   context->exception = xbt_new(ex_ctx_t, 1);
   XBT_CTX_INITIALIZE(context->exception);
-  context->jprocess = (jobject) startup_arg;
+  context->jprocess = (jobject) code;
   context->jenv = get_current_thread_env();
 
-  return (xbt_context_t) context;
+  return (smx_context_t) context;
 }
 
-static void xbt_ctx_java_free(xbt_context_t context)
+static void smx_ctx_java_free(smx_context_t context)
 {
   if (context) {
-    xbt_ctx_java_t ctx_java = (xbt_ctx_java_t) context;
-
-    free(ctx_java->name);
+    smx_ctx_java_t ctx_java = (smx_ctx_java_t) context;
 
     if (ctx_java->jprocess) {
       jobject jprocess = ctx_java->jprocess;
@@ -157,69 +133,30 @@ static void xbt_ctx_java_free(xbt_context_t context)
   }
 }
 
-static void xbt_ctx_java_kill(xbt_context_t context)
+static void smx_ctx_java_start(smx_context_t context)
 {
-  context->iwannadie = 1;
-  xbt_ctx_java_swap(context);
-}
-
-/** 
- * \param context the winner
- *
- * Calling this function blocks the current context and schedule \a context.  
- * When \a context will call xbt_context_yield, it will return
- * to this function as if nothing had happened.
- * 
- * Only the maestro can call this function to run a given process.
- */
-static void xbt_ctx_java_schedule(xbt_context_t context)
-{
-  xbt_assert0((current_context == maestro_context),
-              "You are not supposed to run this function here!");
-  xbt_ctx_java_swap(context);
-}
-
-/** 
- * Calling this function makes the current context yield. The context
- * that scheduled it returns from xbt_context_schedule as if nothing
- * had happened.
- * 
- * Only the processes can call this function, giving back the control
- * to the maestro
- */
-static void xbt_ctx_java_yield(void)
-{
-  xbt_assert0((current_context != maestro_context),
-              "You are not supposed to run this function here!");
-  jprocess_unschedule(current_context);
-}
-
-static void xbt_ctx_java_start(xbt_context_t context)
-{
-  jprocess_start(((xbt_ctx_java_t) context)->jprocess,
+  jprocess_start(((smx_ctx_java_t) context)->jprocess,
                  get_current_thread_env());
 }
 
-static void xbt_ctx_java_stop(int exit_code)
+static void smx_ctx_java_stop(smx_context_t context)
 {
   jobject jprocess = NULL;
 
-  xbt_ctx_java_t ctx_java;
-
-  if (current_context->cleanup_func)
-    (*(current_context->cleanup_func)) (current_context->cleanup_arg);
+  smx_ctx_java_t ctx_java;
 
-  xbt_swag_remove(current_context, context_living);
-  xbt_swag_insert(current_context, context_to_destroy);
+  if (context->cleanup_func)
+    (*(context->cleanup_func)) (context->cleanup_arg);
 
-  ctx_java = (xbt_ctx_java_t) current_context;
+  ctx_java = (smx_ctx_java_t) context;
 
-  if (ctx_java->iwannadie) {
+  /*FIXME: is this really necessary?*/
+  if (simix_global->current_process->iwannadie) {
     /* The maestro call xbt_context_stop() with an exit code set to one */
     if (ctx_java->jprocess) {
       /* if the java process is alive schedule it */
       if (jprocess_is_alive(ctx_java->jprocess, get_current_thread_env())) {
-        jprocess_schedule(current_context);
+        jprocess_schedule(simix_global->current_process->context);
         jprocess = ctx_java->jprocess;
         ctx_java->jprocess = NULL;
 
@@ -238,10 +175,10 @@ static void xbt_ctx_java_stop(int exit_code)
   jprocess_delete_global_ref(jprocess, get_current_thread_env());
 }
 
-static void xbt_ctx_java_swap(xbt_context_t context)
+/*static void smx_ctx_java_swap(smx_context_t context)
 {
   if (context) {
-    xbt_context_t self = current_context;
+    smx_context_t self = current_context;
 
     current_context = context;
 
@@ -251,5 +188,16 @@ static void xbt_ctx_java_swap(xbt_context_t context)
   }
 
   if (current_context->iwannadie)
-    xbt_ctx_java_stop(1);
+    smx_ctx_java_stop(1);
+}*/
+
+static void smx_ctx_java_suspend(smx_context_t context)
+{
+  jprocess_unschedule(context);
 }
+
+static void 
+smx_ctx_java_resume(smx_context_t old_context, smx_context_t new_context)
+{
+  jprocess_schedule(new_context);
+}
\ No newline at end of file
index 7c75315..f646036 100644 (file)
@@ -4,17 +4,17 @@
 #include "portable.h"
 #include "xbt/misc.h"
 
-#include "xbt/xbt_context_private.h"
+#include "private.h"
 #include "java/jmsg.h"
 #include "java/jmsg_process.h"
 
 SG_BEGIN_DECL()
 
-     typedef struct s_xbt_ctx_java {
-       XBT_CTX_BASE_T;
+     typedef struct s_smx_ctx_java {
+       SMX_CTX_BASE_T;
        jobject jprocess;        /* the java process instance binded with the msg process structure                                                      */
        JNIEnv *jenv;            /* jni interface pointer associated to this thread                                                                                      */
-     } s_xbt_ctx_java_t, *xbt_ctx_java_t;
+     } s_smx_ctx_java_t, *smx_ctx_java_t;
 
 SG_END_DECL()
 #endif /* !_XBT_CONTEXT_JAVA_H */
index e0c849c..728cb37 100644 (file)
@@ -14,7 +14,6 @@
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_process, simix,
                                 "Logging specific to SIMIX (process)");
 
-/******************************** Process ************************************/
 /**
  * \brief Move a process to the list of process to destroy. *
  */