Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Distinguish access to sender-side and receiver-side user data in smx_action_t.
[simgrid.git] / src / simix / smx_smurf.c
index 55d6ba1..3d6bbf0 100644 (file)
@@ -24,9 +24,11 @@ void SIMIX_request_push(smx_req_t req)
 {
   req->issuer = SIMIX_process_self();
   if (req->issuer != simix_global->maestro_process){
-    xbt_os_mutex_acquire(sync_req_vector);
+    if (_surf_parallel_contexts)
+      xbt_os_mutex_acquire(sync_req_vector);
     xbt_dynar_set_as(req_vector, req->issuer->pid, smx_req_t, req);
-    xbt_os_mutex_release(sync_req_vector);
+    if (_surf_parallel_contexts)
+      xbt_os_mutex_release(sync_req_vector);
     req->issuer->request = req;
     DEBUG2("Yield process '%s' on request of type %d", req->issuer->name, req->call);
     SIMIX_process_yield();
@@ -38,13 +40,12 @@ void SIMIX_request_push(smx_req_t req)
 smx_req_t SIMIX_request_pop(void)
 {
   smx_req_t request = NULL;
-  xbt_os_mutex_acquire(sync_req_vector);
   while (xbt_dynar_length(req_vector)){
     request = xbt_dynar_pop_as(req_vector, smx_req_t);
     if (request)
       break;
   }
-  xbt_os_mutex_release(sync_req_vector);
+
   return request;
 }
 
@@ -311,6 +312,7 @@ void SIMIX_request_pre(smx_req_t req)
          req->comm_isend.rate,
          req->comm_isend.src_buff,
          req->comm_isend.src_buff_size,
+         req->comm_isend.match_fun,
          req->comm_isend.data);
       SIMIX_request_answer(req);
       break;
@@ -320,7 +322,9 @@ void SIMIX_request_pre(smx_req_t req)
          req->issuer,
          req->comm_irecv.rdv,
          req->comm_irecv.dst_buff,
-         req->comm_irecv.dst_buff_size);
+         req->comm_irecv.dst_buff_size,
+         req->comm_irecv.match_fun,
+         req->comm_irecv.data);
       SIMIX_request_answer(req);
       break;
 
@@ -346,6 +350,10 @@ void SIMIX_request_pre(smx_req_t req)
       SIMIX_pre_comm_test(req);
       break;
 
+    case REQ_COMM_TESTANY:
+      SIMIX_pre_comm_testany(req);
+      break;
+
     case REQ_COMM_GET_REMAINS:
       req->comm_get_remains.result = 
         SIMIX_comm_get_remains(req->comm_get_remains.comm);
@@ -358,8 +366,13 @@ void SIMIX_request_pre(smx_req_t req)
       SIMIX_request_answer(req);
       break;
 
-    case REQ_COMM_GET_DATA:
-      req->comm_get_data.result = SIMIX_comm_get_data(req->comm_get_data.comm);
+    case REQ_COMM_GET_SRC_DATA:
+      req->comm_get_src_data.result = SIMIX_comm_get_src_data(req->comm_get_src_data.comm);
+      SIMIX_request_answer(req);
+      break;
+
+    case REQ_COMM_GET_DST_DATA:
+      req->comm_get_dst_data.result = SIMIX_comm_get_dst_data(req->comm_get_dst_data.comm);
       SIMIX_request_answer(req);
       break;