X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f7c38a5c54c0ec04663ee41183bf583edea6c856..94ff4102c5e06620e21d6b8ba2c8838f6c711ddf:/src/gras/Transport/transport.c diff --git a/src/gras/Transport/transport.c b/src/gras/Transport/transport.c index 4f5fe776bf..41277c1b0e 100644 --- a/src/gras/Transport/transport.c +++ b/src/gras/Transport/transport.c @@ -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,12 +292,11 @@ 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; } @@ -338,7 +330,7 @@ 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; + gras_socket_t sock_iter = NULL; int cursor; XBT_IN; @@ -355,7 +347,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,7 +362,6 @@ void gras_socket_close(gras_socket_t sock) { free(sock->peer_name); free(sock); XBT_OUT; - xbt_dynar_cursor_unlock(sockets); return; } }