X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d672a6447aca931be2b670c5c5e177013513c7ee..806504b9602a886e391b54e458b2c1f7f42d3afb:/src/simix/smx_smurf.c?ds=sidebyside diff --git a/src/simix/smx_smurf.c b/src/simix/smx_smurf.c index b01ce7b25e..3d6bbf0659 100644 --- a/src/simix/smx_smurf.c +++ b/src/simix/smx_smurf.c @@ -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; } @@ -365,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;