Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove superfluous refcounting.
[simgrid.git] / src / msg / msg_gos.cpp
index 803e509..c394c44 100644 (file)
@@ -45,7 +45,6 @@ msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeo
   e_smx_state_t comp_state;
   msg_error_t status = MSG_OK;
 
-  TRACE_msg_task_execute_start(task);
 
   xbt_assert((not simdata->compute) && not task->simdata->isused,
              "This task is executed somewhere else. Go fix your code!");
@@ -53,10 +52,12 @@ msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeo
   XBT_DEBUG("Computing on %s", MSG_process_get_name(MSG_process_self()));
 
   if (simdata->flops_amount <= 0.0 && not simdata->host_nb) {
-    TRACE_msg_task_execute_end(task);
     return MSG_OK;
   }
 
+  if (TRACE_actor_is_enabled())
+    simgrid::instr::Container::by_name(instr_pid(MSG_process_self()))->get_state("ACTOR_STATE")->push_event("execute");
+
   try {
     simdata->setUsed();
 
@@ -91,50 +92,17 @@ msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeo
     status = MSG_HOST_FAILURE;
   } catch (simgrid::TimeoutError& e) {
     status = MSG_TIMEOUT;
-  } catch (xbt_ex& e) {
-    if (e.category == cancel_error)
-      status = MSG_TASK_CANCELED;
-    else
-      throw;
+  } catch (simgrid::CancelException& e) {
+    status = MSG_TASK_CANCELED;
   }
 
   /* action ended, set comm and compute = nullptr, the actions is already destroyed in the main function */
   simdata->flops_amount = 0.0;
   simdata->comm = nullptr;
   simdata->compute = nullptr;
-  TRACE_msg_task_execute_end(task);
 
-  return status;
-}
-
-/**
- * @brief Sleep for the specified number of seconds
- *
- * Makes the current process sleep until @a time seconds have elapsed.
- *
- * @param nb_sec a number of second
- */
-msg_error_t MSG_process_sleep(double nb_sec)
-{
-  msg_error_t status = MSG_OK;
-
-  try {
-    simgrid::s4u::this_actor::sleep_for(nb_sec);
-  } catch (simgrid::HostFailureException& e) {
-    status = MSG_HOST_FAILURE;
-  } catch (xbt_ex& e) {
-    if (e.category == cancel_error) {
-      XBT_DEBUG("According to the JAVA API, a sleep call should only deal with HostFailureException, I'm lost.");
-      // adsein: MSG_TASK_CANCELED is assigned when someone kills the process that made the sleep, this is not
-      // correct. For instance, when the node is turned off, the error should be MSG_HOST_FAILURE, which is by the way
-      // and according to the JAVA document, the only exception that can be triggered by MSG_Process_sleep call.
-      // To avoid possible impacts in the code, I just raised a host_failure exception for the moment in the JAVA code
-      // and did not change anythings at the C level.
-      // See comment in the jmsg_process.c file, function JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_sleep(JNIEnv *env, jclass cls, jlong jmillis, jint jnanos)
-      status = MSG_TASK_CANCELED;
-    } else
-      throw;
-  }
+  if (TRACE_actor_is_enabled())
+    simgrid::instr::Container::by_name(instr_pid(MSG_process_self()))->get_state("ACTOR_STATE")->pop_event();
 
   return status;
 }
@@ -288,17 +256,13 @@ msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, d
     ret = MSG_HOST_FAILURE;
   } catch (simgrid::TimeoutError& e) {
     ret = MSG_TIMEOUT;
+  } catch (simgrid::CancelException& e) {
+    ret = MSG_HOST_FAILURE;
   } catch (xbt_ex& e) {
-    switch (e.category) {
-    case cancel_error:
-      ret = MSG_HOST_FAILURE;
-      break;
-    case network_error:
+    if (e.category == network_error)
       ret = MSG_TRANSFER_FAILURE;
-      break;
-    default:
+    else
       throw;
-    }
   }
 
   if (ret != MSG_HOST_FAILURE && ret != MSG_TRANSFER_FAILURE && ret != MSG_TIMEOUT) {
@@ -612,13 +576,10 @@ int MSG_comm_waitany(xbt_dynar_t comms)
   int finished_index = -1;
 
   /* create the equivalent dynar with SIMIX objects */
-  xbt_dynar_t s_comms = xbt_dynar_new(sizeof(smx_activity_t), [](void*ptr){
-    intrusive_ptr_release(*(simgrid::kernel::activity::ActivityImpl**)ptr);
-  });
+  xbt_dynar_t s_comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), nullptr);
   msg_comm_t comm;
   unsigned int cursor;
   xbt_dynar_foreach(comms, cursor, comm) {
-    intrusive_ptr_add_ref(comm->s_comm.get());
     xbt_dynar_push_as(s_comms, simgrid::kernel::activity::ActivityImpl*, comm->s_comm.get());
   }
 
@@ -678,15 +639,12 @@ msg_task_t MSG_comm_get_task(msg_comm_t comm)
 
 /**
  * @brief This function is called by SIMIX in kernel mode to copy the data of a comm.
- * @param synchro the comm
+ * @param comm the comm
  * @param buff the data copied
  * @param buff_size size of the buffer
  */
-void MSG_comm_copy_data_from_SIMIX(smx_activity_t synchro, void* buff, size_t buff_size)
+void MSG_comm_copy_data_from_SIMIX(simgrid::kernel::activity::CommImpl* comm, void* buff, size_t buff_size)
 {
-  simgrid::kernel::activity::CommImplPtr comm =
-      boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro);
-
   SIMIX_comm_copy_pointer_callback(comm, buff, buff_size);
 
   // notify the user callback if any
@@ -781,18 +739,13 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl
     simcall_comm_wait(comm, timeout);
   } catch (simgrid::TimeoutError& e) {
     ret = MSG_TIMEOUT;
-  }
-  catch (xbt_ex& e) {
-    switch (e.category) {
-    case cancel_error:
-      ret = MSG_HOST_FAILURE;
-      break;
-    case network_error:
+  } catch (simgrid::CancelException& e) {
+    ret = MSG_HOST_FAILURE;
+  } catch (xbt_ex& e) {
+    if (e.category == network_error)
       ret = MSG_TRANSFER_FAILURE;
-      break;
-    default:
+    else
       throw;
-    }
 
     /* If the send failed, it is not used anymore */
     t_simdata->setNotUsed();