Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Factorize stack creation.
[simgrid.git] / src / simix / smx_private.h
index 59f4342..87a76e4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
+/* Copyright (c) 2007-2010, 2012-2014. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -73,12 +73,9 @@ extern xbt_dict_t watched_hosts_lib;
 /* ******************************** File ************************************ */
 typedef struct s_smx_file {
   surf_file_t surf_file;
+  void* data;                   /**< @brief user data */
 } s_smx_file_t;
 
-typedef struct s_smx_stat {
-  s_file_stat_t surf_stat;
-} s_smx_stat_t;
-
 /*********************************** Time ************************************/
 
 /** @brief Timer datatype */
@@ -136,6 +133,12 @@ typedef struct s_smx_action {
     struct {
       e_smx_comm_type_t type;         /* Type of the communication (SIMIX_COMM_SEND or SIMIX_COMM_RECEIVE) */
       smx_rdv_t rdv;                  /* Rendez-vous where the comm is queued */
+
+#ifdef HAVE_MC
+      smx_rdv_t rdv_cpy;              /* Copy of the rendez-vous where the comm is queued, MC needs it for DPOR 
+                                         (comm.rdv set to NULL when the communication is removed from the mailbox 
+                                         (used as garbage collector)) */
+#endif
       int refcount;                   /* Number of processes involved in the cond */
       int detached;                   /* If detached or not */
 
@@ -195,26 +198,12 @@ typedef struct s_smx_action {
 #endif
 } s_smx_action_t;
 
-/* FIXME: check if we can delete this function */
-static XBT_INLINE e_smx_state_t SIMIX_action_map_state(e_surf_action_state_t state)
-{
-  switch (state) {
-    case SURF_ACTION_READY:
-      return SIMIX_READY;
-    case SURF_ACTION_RUNNING:
-      return SIMIX_RUNNING;
-    case SURF_ACTION_FAILED:
-      return SIMIX_FAILED;
-    case SURF_ACTION_DONE:
-      return SIMIX_DONE;
-    default:
-      xbt_die("Unexpected SURF action state");
-  }
-}
-
 void SIMIX_context_mod_init(void);
 void SIMIX_context_mod_exit(void);
 
+void *SIMIX_context_stack_new(void);
+void SIMIX_context_stack_delete(void *stack);
+
 void SIMIX_context_set_current(smx_context_t context);
 smx_context_t SIMIX_context_get_current(void);
 
@@ -258,7 +247,8 @@ static XBT_INLINE smx_context_t SIMIX_context_new(xbt_main_func_t code,
                                                   void_pfn_smxprocess_t cleanup_func,
                                                   smx_process_t simix_process)
 {
-
+  if (!simix_global)
+    xbt_die("simix is not initialized, please call MSG_init first");
   return simix_global->context_factory->create_context(code,
                                                        argc, argv,
                                                        cleanup_func,
@@ -312,18 +302,17 @@ static XBT_INLINE smx_context_t SIMIX_context_self(void)
   if (simix_global && simix_global->context_factory) {
     return simix_global->context_factory->self();
   }
-
   return NULL;
 }
 
 /**
- \brief returns the data associated to a context
+ \brief returns the SIMIX process associated to a context
  \param context The context
- \return The data
+ \return The SIMIX process
  */
-static XBT_INLINE void* SIMIX_context_get_data(smx_context_t context)
+static XBT_INLINE smx_process_t SIMIX_context_get_process(smx_context_t context)
 {
-  return simix_global->context_factory->get_data(context);
+  return simix_global->context_factory->get_process(context);
 }
 
 XBT_PUBLIC(int) SIMIX_process_get_maxpid(void);