X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8fd812d10ac0af376498fac70a6744babb318328..ac142db78573fd358c82321a2c7f4f43ece4daa0:/examples/gras/tokenS/tokenS.c diff --git a/examples/gras/tokenS/tokenS.c b/examples/gras/tokenS/tokenS.c index 69b632781e..27b447177b 100644 --- a/examples/gras/tokenS/tokenS.c +++ b/examples/gras/tokenS/tokenS.c @@ -11,8 +11,8 @@ #include "gras.h" -//#define NBLOOPS 10 -#define NBLOOPS 1000 +#define NBLOOPS 100 +/*#define NBLOOPS 30000*/ XBT_LOG_NEW_DEFAULT_CATEGORY(Token,"Messages specific to this example"); @@ -41,8 +41,8 @@ typedef struct { /* Callback function */ static int node_cb_stoken_handler(gras_socket_t expeditor, void *payload_data) { - - xbt_error_t errcode; + + xbt_ex_t e; /* 1. Get the payload into the msg variable */ int msg=*(int*)payload_data; @@ -55,11 +55,11 @@ static int node_cb_stoken_handler(gras_socket_t expeditor, int supersteps = 1; if (NBLOOPS >= 1000) { supersteps = 100; - } else if (NBLOOPS > 100) { + } else if (NBLOOPS >= 100) { supersteps = 10; } if (globals->create && (! (globals->remaining_loop % supersteps))) { - INFO1("Begin a new loop. Still to do: %d", globals->remaining_loop); + VERB1("Begin a new loop. Still to do: %d", globals->remaining_loop); } else if (! (globals->remaining_loop % supersteps)) { VERB3("Got token(%d) from %s remaining_loop=%d", msg, gras_socket_peer_name(expeditor),globals->remaining_loop); @@ -77,14 +77,14 @@ static int node_cb_stoken_handler(gras_socket_t expeditor, /* 6. Send it as payload of a stoken message to the successor */ - errcode = gras_msg_send(globals->tosuccessor, - gras_msgtype_by_name("stoken"), &msg); + TRY { + gras_msg_send(globals->tosuccessor, + gras_msgtype_by_name("stoken"), &msg); /* 7. Deal with errors */ - if (errcode != no_error) { - ERROR1("Unable to forward token: %s\n", xbt_error_name(errcode)); + } CATCH(e) { gras_socket_close(globals->sock); - return 1; + RETHROW0("Unable to forward token: %s"); } } @@ -93,34 +93,38 @@ static int node_cb_stoken_handler(gras_socket_t expeditor, reused by our predecessor. Closing this side would thus create troubles */ - /* 9. Decrease the remaining_loop integer. */ + /* 8. Decrease the remaining_loop integer. */ globals->remaining_loop -= 1; - /* 10. Repport the hop number to the user at the end */ + /* 9. Repport the hop number to the user at the end */ if (globals->remaining_loop == -1 && globals->create) { INFO1("Shut down the token-ring. There was %d hops.",msg); } - /* 11. Tell GRAS that we consummed this message */ + /* 10. Tell GRAS that we consummed this message */ return 1; } /* end_of_node_cb_stoken_handler */ int node (int argc,char *argv[]) { - xbt_error_t errcode; node_data_t *globals; + const char *host; + int myport; + int peerport; + + xbt_ex_t e; /* 1. Init the GRAS infrastructure and declare my globals */ - gras_init(&argc,argv, NULL); + gras_init(&argc,argv); globals=gras_userdata_new(node_data_t); /* 2. Get the successor's address. The command line overrides defaults when specified */ - const char *host = "127.0.0.1"; - int myport = 4000; - int peerport = 4000; + host = "127.0.0.1"; + myport = 4000; + peerport = 4000; if (argc >= 4) { myport=atoi(argv[1]); host=argv[2]; @@ -136,24 +140,14 @@ int node (int argc,char *argv[]) { gras_os_getpid(), host,peerport, myport); /* 4. Create my master socket for listening */ - if ((errcode=gras_socket_server(myport,&(globals->sock)))) { - CRITICAL1("Error %s encountered while opening the server socket. Bailing out.", - xbt_error_name(errcode)); - return 1; - } + globals->sock = gras_socket_server(myport); gras_os_sleep(1.0); /* Make sure all server sockets are created */ /* 5. Create socket to the successor on the ring */ DEBUG2("Connect to my successor on %s:%d",host,peerport); - if ((errcode=gras_socket_client(host,peerport, - &(globals->tosuccessor)))) { - ERROR1("Unable to connect to the node (got %s). Bailing out.", - xbt_error_name(errcode)); - return 1; - } - + globals->tosuccessor = gras_socket_client(host,peerport); /* 6. Register the known messages. This function is called twice here, but it's because this file also acts as regression test. @@ -178,26 +172,18 @@ int node (int argc,char *argv[]) { INFO3("Create the token (with value %d) and send it to %s:%d", token, host, peerport); - errcode = gras_msg_send(globals->tosuccessor, - gras_msgtype_by_name("stoken"), &token); - - if (errcode != no_error) { - fprintf(stderr, "Unable send 'stoken' to successor (%s)\n", - xbt_error_name(errcode)); - return 1; + TRY { + gras_msg_send(globals->tosuccessor, + gras_msgtype_by_name("stoken"), &token); + } CATCH(e) { + RETHROW0("Unable to send the freshly created token: %s"); } } /* 8. Wait up to 10 seconds for an incomming message to handle */ while (globals->remaining_loop > (globals->create ? -1 : 0)) { - errcode = gras_msg_handle(10.0); + gras_msg_handle(10.0); - /* 9. Housekeeping */ - if (errcode != no_error) { - ERROR1("Got error %s in msg_handle", xbt_error_name(errcode)); - return errcode; - } - DEBUG1("looping (remaining_loop=%d)", globals->remaining_loop); } @@ -209,6 +195,5 @@ int node (int argc,char *argv[]) { free(globals); gras_exit(); - INFO0("Done"); - return no_error; + return 0; } /* end_of_node */