X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ae66e43b95b26467c1cb9df271e83f51d3d7147b..94ff4102c5e06620e21d6b8ba2c8838f6c711ddf:/src/gras/Transport/transport.c diff --git a/src/gras/Transport/transport.c b/src/gras/Transport/transport.c index e668b3f32a..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,19 +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; } /** @@ -298,10 +292,11 @@ gras_socket_client_ext(const char *host, sock->outgoing?'y':'n', sock->accepting?'y':'n'); } CATCH(e) { - free(sock); - RETHROW; + free(sock); + RETHROW; } - + xbt_dynar_push(((gras_trp_procdata_t) + gras_libdata_by_id(gras_trp_libdata_id))->sockets,&sock); return sock; } @@ -335,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; @@ -352,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); @@ -368,7 +366,7 @@ void gras_socket_close(gras_socket_t sock) { } } WARN1("Ignoring request to free an unknown socket (%p). Execution stack:",sock); - xbt_backtrace_display(); + xbt_backtrace_display_current(); } XBT_OUT; } @@ -565,7 +563,7 @@ static void *gras_trp_procdata_new() { res->name = xbt_strdup("gras_trp"); res->name_len = 0; - res->sockets = xbt_dynar_new(sizeof(gras_socket_t*), NULL); + res->sockets = xbt_dynar_new_sync(sizeof(gras_socket_t*), NULL); res->myport = 0; return (void*)res;