X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5d92a76d54f0104f9ed747a1c89363806e5d4ac4..ec16845133f5f1b5262d2d77d8ba22824fa8a446:/src/gras/Msg/rpc.c diff --git a/src/gras/Msg/rpc.c b/src/gras/Msg/rpc.c index 86c5788736..6375e3a590 100644 --- a/src/gras/Msg/rpc.c +++ b/src/gras/Msg/rpc.c @@ -1,8 +1,7 @@ -/* $Id$ */ - /* rpc - RPC implementation on top of GRAS messages */ -/* Copyright (c) 2005 Martin Quinson. All rights reserved. */ +/* Copyright (c) 2006, 2007, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -70,16 +69,16 @@ static int msgfilter_rpcID(gras_msg_t msg, void *ctx) { unsigned long int ID = *(unsigned long int *) ctx; int res = msg->ID == ID && - (msg->kind == e_gras_msg_kind_rpcanswer - || msg->kind == e_gras_msg_kind_rpcerror); + (msg->kind == e_gras_msg_kind_rpcanswer + || msg->kind == e_gras_msg_kind_rpcerror); unsigned int cursor; gras_msg_cb_ctx_t rpc_ctx; - DEBUG5 - ("Filter a message of ID %lu, type '%s' and kind '%s'. Waiting for ID=%lu. %s", - msg->ID, msg->type->name, e_gras_msg_kind_names[msg->kind], ID, - res ? "take it" : "reject"); + XBT_DEBUG + ("Filter a message of ID %lu, type '%s' and kind '%s'. Waiting for ID=%lu. %s", + msg->ID, msg->type->name, e_gras_msg_kind_names[msg->kind], ID, + res ? "take it" : "reject"); if (res && !_gras_rpc_cancelled) return res; @@ -87,9 +86,9 @@ static int msgfilter_rpcID(gras_msg_t msg, void *ctx) /* Check whether it is an old answer to a message we already canceled */ xbt_dynar_foreach(_gras_rpc_cancelled, cursor, rpc_ctx) { if (msg->ID == rpc_ctx->ID && msg->kind == e_gras_msg_kind_rpcanswer) { - VERB1 - ("Got an answer to the already canceled (timeouted?) RPC %ld. Ignore it (leaking the payload!).", - msg->ID); + XBT_VERB + ("Got an answer to the already canceled (timeouted?) RPC %ld. Ignore it (leaking the payload!).", + msg->ID); xbt_dynar_cursor_rm(_gras_rpc_cancelled, &cursor); return 1; } @@ -129,7 +128,8 @@ gras_msg_rpc_async_call_(gras_socket_t server, msgtype->name); } else { xbt_assert1(!request, - "No payload was declared for RPC type '%s'", msgtype->name); + "No payload was declared for RPC type '%s'", + msgtype->name); } ctx->ID = last_msg_ID++; @@ -137,7 +137,7 @@ gras_msg_rpc_async_call_(gras_socket_t server, ctx->msgtype = msgtype; ctx->timeout = timeOut; - VERB4("Send to %s:%d a RPC of type '%s' (ID=%lu)", + XBT_VERB("Send to %s:%d a RPC of type '%s' (ID=%lu)", gras_socket_peer_name(server), gras_socket_peer_port(server), msgtype->name, ctx->ID); @@ -176,10 +176,11 @@ void gras_msg_rpc_async_wait(gras_msg_cb_ctx_t ctx, void *answer) if (!_gras_rpc_cancelled) _gras_rpc_cancelled = xbt_dynar_new(sizeof(ctx), NULL); xbt_dynar_push(_gras_rpc_cancelled, &ctx); - INFO5("canceled RPC %ld pushed onto the stack (%s from %s:%d) Reason: %s", - ctx->ID, ctx->msgtype->name, - gras_socket_peer_name(ctx->expeditor), - gras_socket_peer_port(ctx->expeditor), e.msg); + XBT_INFO + ("canceled RPC %ld pushed onto the stack (%s from %s:%d) Reason: %s", + ctx->ID, ctx->msgtype->name, + gras_socket_peer_name(ctx->expeditor), + gras_socket_peer_port(ctx->expeditor), e.msg); RETHROW; } @@ -188,22 +189,23 @@ void gras_msg_rpc_async_wait(gras_msg_cb_ctx_t ctx, void *answer) xbt_ex_t e; memcpy(&e, received.payl, received.payl_size); free(received.payl); - VERB3("Raise a remote exception cat:%d comming from %s (%s)", + XBT_VERB("Raise a remote exception cat:%d coming from %s (%s)", e.category, e.host, e.msg); - __xbt_ex_ctx()->ctx_ex.msg = e.msg; - __xbt_ex_ctx()->ctx_ex.category = e.category; - __xbt_ex_ctx()->ctx_ex.value = e.value; - __xbt_ex_ctx()->ctx_ex.remote = 1; - __xbt_ex_ctx()->ctx_ex.host = e.host; - __xbt_ex_ctx()->ctx_ex.procname = e.procname; - __xbt_ex_ctx()->ctx_ex.pid = e.pid; - __xbt_ex_ctx()->ctx_ex.file = e.file; - __xbt_ex_ctx()->ctx_ex.line = e.line; - __xbt_ex_ctx()->ctx_ex.func = e.func; - __xbt_ex_ctx()->ctx_ex.used = e.used; - __xbt_ex_ctx()->ctx_ex.bt_strings = e.bt_strings; - memset(&__xbt_ex_ctx()->ctx_ex.bt, 0, sizeof(__xbt_ex_ctx()->ctx_ex.bt)); - DO_THROW(__xbt_ex_ctx()->ctx_ex); + __xbt_running_ctx_fetch()->exception.msg = e.msg; + __xbt_running_ctx_fetch()->exception.category = e.category; + __xbt_running_ctx_fetch()->exception.value = e.value; + __xbt_running_ctx_fetch()->exception.remote = 1; + __xbt_running_ctx_fetch()->exception.host = e.host; + __xbt_running_ctx_fetch()->exception.procname = e.procname; + __xbt_running_ctx_fetch()->exception.pid = e.pid; + __xbt_running_ctx_fetch()->exception.file = e.file; + __xbt_running_ctx_fetch()->exception.line = e.line; + __xbt_running_ctx_fetch()->exception.func = e.func; + __xbt_running_ctx_fetch()->exception.used = e.used; + __xbt_running_ctx_fetch()->exception.bt_strings = e.bt_strings; + memset(&__xbt_running_ctx_fetch()->exception.bt, 0, + sizeof(__xbt_running_ctx_fetch()->exception.bt)); + DO_THROW(__xbt_running_ctx_fetch()); } memcpy(answer, received.payl, received.payl_size); free(received.payl); @@ -228,12 +230,13 @@ void gras_msg_rpccall_(gras_socket_t server, * some cleanups before leaving. */ -void gras_msg_rpcreturn(double timeOut, gras_msg_cb_ctx_t ctx, void *answer) +void gras_msg_rpcreturn(double timeOut, gras_msg_cb_ctx_t ctx, + void *answer) { xbt_assert0(ctx->answer_due, "RPC return not allowed here. Either not a RPC message or already returned a result"); ctx->answer_due = 0; - DEBUG5("Return to RPC '%s' from %s:%d (tOut=%f, payl=%p)", + XBT_DEBUG("Return to RPC '%s' from %s:%d (tOut=%f, payl=%p)", ctx->msgtype->name, gras_socket_peer_name(ctx->expeditor), gras_socket_peer_port(ctx->expeditor), timeOut, answer);