X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bc911012d7b8acd058eb71df52b6a2686bb4f8ef..32e043cb47a2c23cd2b419c037d56f8139d51765:/src/gras/Transport/transport.c diff --git a/src/gras/Transport/transport.c b/src/gras/Transport/transport.c index e219c390ce..2c532f3aef 100644 --- a/src/gras/Transport/transport.c +++ b/src/gras/Transport/transport.c @@ -153,7 +153,7 @@ void gras_trp_socket_new(int incoming, sock->outgoing = incoming ? 0:1; sock->accepting = incoming ? 1:0; sock->meas = 0; - sock->recv_ok = 1; + sock->recvd = 0; sock->valid = 1; sock->moredata = 0; @@ -168,8 +168,6 @@ void gras_trp_socket_new(int incoming, *dst = sock; - xbt_dynar_push(((gras_trp_procdata_t) - gras_libdata_by_id(gras_trp_libdata_id))->sockets,dst); XBT_OUT; } @@ -212,20 +210,15 @@ gras_socket_server_ext(unsigned short port, sock->outgoing?'y':'n', sock->accepting?'y':'n'); } CATCH(e) { - int cursor; - gras_socket_t sock_iter; - xbt_dynar_t socks = ((gras_trp_procdata_t) gras_libdata_by_id(gras_trp_libdata_id))->sockets; - xbt_dynar_foreach(socks, cursor, sock_iter) { - if (sock_iter==sock) { - xbt_dynar_cursor_rm(socks,&cursor); - } - } + free(sock); RETHROW; } if (!measurement) ((gras_trp_procdata_t) gras_libdata_by_id(gras_trp_libdata_id))->myport = port; + xbt_dynar_push(((gras_trp_procdata_t) + gras_libdata_by_id(gras_trp_libdata_id))->sockets,&sock); return sock; } /** @@ -299,19 +292,17 @@ gras_socket_client_ext(const char *host, sock->outgoing?'y':'n', sock->accepting?'y':'n'); } CATCH(e) { - xbt_dynar_pop(((gras_trp_procdata_t) - gras_libdata_by_id(gras_trp_libdata_id))->sockets,NULL); free(sock); - RETHROW; + RETHROW; } - + xbt_dynar_push(((gras_trp_procdata_t) + gras_libdata_by_id(gras_trp_libdata_id))->sockets,&sock); return sock; } /** - * gras_socket_server: - * - * Opens a server socket and make it ready to be listened to. + * @brief Opens a server socket and make it ready to be listened to. + * * In real life, you'll get a TCP socket. */ gras_socket_t @@ -338,8 +329,8 @@ gras_socket_client_from_string(const char *host) { /** \brief Close socket */ void gras_socket_close(gras_socket_t sock) { xbt_dynar_t sockets = ((gras_trp_procdata_t) gras_libdata_by_id(gras_trp_libdata_id))->sockets; - gras_socket_t sock_iter; - int cursor; + gras_socket_t sock_iter = NULL; + unsigned int cursor; XBT_IN; VERB1("Close %p",sock); @@ -355,7 +346,10 @@ void gras_socket_close(gras_socket_t sock) { /* FIXME: Issue an event when the socket is closed */ DEBUG1("sockets pointer before %p",sockets); if (sock) { - xbt_dynar_foreach(sockets,cursor,sock_iter) { + /* FIXME: Cannot get the dynar mutex, because it can be already locked */ +// _xbt_dynar_foreach(sockets,cursor,sock_iter) { + for (cursor=0; cursor< xbt_dynar_length(sockets); cursor++) { + _xbt_dynar_cursor_get(sockets,&cursor,&sock_iter); if (sock == sock_iter) { DEBUG2("remove sock cursor %d dize %lu\n",cursor,xbt_dynar_length(sockets)); xbt_dynar_cursor_rm(sockets,&cursor); @@ -367,12 +361,11 @@ void gras_socket_close(gras_socket_t sock) { free(sock->peer_name); free(sock); XBT_OUT; - xbt_dynar_cursor_unlock(sockets); return; } } WARN1("Ignoring request to free an unknown socket (%p). Execution stack:",sock); - xbt_backtrace_display(); + xbt_backtrace_display_current(); } XBT_OUT; } @@ -564,7 +557,7 @@ gras_socket_t gras_socket_meas_accept(gras_socket_t peer){ /* * Creating procdata for this module */ -static void *gras_trp_procdata_new() { +static void *gras_trp_procdata_new(void) { gras_trp_procdata_t res = xbt_new(s_gras_trp_procdata_t,1); res->name = xbt_strdup("gras_trp"); @@ -590,7 +583,7 @@ void gras_trp_socketset_dump(const char *name) { gras_trp_procdata_t procdata = (gras_trp_procdata_t)gras_libdata_by_id(gras_trp_libdata_id); - int it; + unsigned int it; gras_socket_t s; INFO1("** Dump the socket set %s",name);