X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f783ed4680c6862a1b7543237e89d1221334bae0..6b188a3ca7fe91cf125a08229fb4fe51eee26e6d:/src/simix/smx_smurf.c diff --git a/src/simix/smx_smurf.c b/src/simix/smx_smurf.c index 6a65331648..1fb1585b25 100644 --- a/src/simix/smx_smurf.c +++ b/src/simix/smx_smurf.c @@ -5,31 +5,33 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_smurf, simix, "Logging specific to SIMIX (SMURF)"); -/* FIXME: we may want to save the initialization of issuer... */ XBT_INLINE smx_req_t SIMIX_req_mine() { smx_process_t issuer = SIMIX_process_self(); return &issuer->request; } -void SIMIX_request_push() +/** + * \brief Makes the current process do a request to the kernel and yields + * until completion. + * \param self the current process + */ +void SIMIX_request_push(smx_process_t self) { - smx_process_t issuer = SIMIX_process_self(); - - if (issuer != simix_global->maestro_process){ - issuer->request.issuer = issuer; - XBT_DEBUG("Yield process '%s' on request of type %s (%d)", issuer->name, - SIMIX_request_name(issuer->request.call), issuer->request.call); - SIMIX_process_yield(); + if (self != simix_global->maestro_process) { + XBT_DEBUG("Yield process '%s' on request of type %s (%d)", self->name, + SIMIX_request_name(self->request.call), self->request.call); + SIMIX_process_yield(self); } else { - SIMIX_request_pre(&issuer->request, 0); + SIMIX_request_pre(&self->request, 0); } } void SIMIX_request_answer(smx_req_t req) { if (req->issuer != simix_global->maestro_process){ - XBT_DEBUG("Answer request %s (%d)", SIMIX_request_name(req->call), req->call); + XBT_DEBUG("Answer request %s (%d) issued by %s (%p)", SIMIX_request_name(req->call), req->call, + req->issuer->name, req->issuer); req->issuer->request.call = REQ_NO_REQ; xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, req->issuer); } @@ -37,6 +39,7 @@ void SIMIX_request_answer(smx_req_t req) void SIMIX_request_pre(smx_req_t req, int value) { + XBT_DEBUG("Handling request %p: %s", req, SIMIX_request_name(req->call)); switch (req->call) { case REQ_COMM_TEST: @@ -68,6 +71,7 @@ void SIMIX_request_pre(smx_req_t req, int value) req->comm_send.src_buff, req->comm_send.src_buff_size, req->comm_send.match_fun, + NULL, /* no clean function since it's not detached */ req->comm_send.data, 0); SIMIX_pre_comm_wait(req, comm, req->comm_send.timeout, 0); @@ -83,6 +87,7 @@ void SIMIX_request_pre(smx_req_t req, int value) req->comm_isend.src_buff, req->comm_isend.src_buff_size, req->comm_isend.match_fun, + req->comm_isend.clean_fun, req->comm_isend.data, req->comm_isend.detached); SIMIX_request_answer(req); @@ -482,6 +487,7 @@ void SIMIX_request_pre(smx_req_t req, int value) SIMIX_host_get_name(SIMIX_process_get_host(req->issuer)) ); break; + } }