A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Do not push newly created sockets into the dynar before they get initialized, or...
[simgrid.git]
/
src
/
gras
/
Transport
/
transport.c
diff --git
a/src/gras/Transport/transport.c
b/src/gras/Transport/transport.c
index
4f5fe77
..
41277c1
100644
(file)
--- 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;
*dst = sock;
- xbt_dynar_push(((gras_trp_procdata_t)
- gras_libdata_by_id(gras_trp_libdata_id))->sockets,dst);
XBT_OUT;
}
XBT_OUT;
}
@@
-212,20
+210,15
@@
gras_socket_server_ext(unsigned short port,
sock->outgoing?'y':'n',
sock->accepting?'y':'n');
} CATCH(e) {
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;
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;
}
/**
return sock;
}
/**
@@
-299,12
+292,11
@@
gras_socket_client_ext(const char *host,
sock->outgoing?'y':'n',
sock->accepting?'y':'n');
} CATCH(e) {
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);
free(sock);
- RETHROW;
+
RETHROW;
}
}
-
+ xbt_dynar_push(((gras_trp_procdata_t)
+ gras_libdata_by_id(gras_trp_libdata_id))->sockets,&sock);
return 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;
/** \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;
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) {
/* 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);
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;
free(sock->peer_name);
free(sock);
XBT_OUT;
- xbt_dynar_cursor_unlock(sockets);
return;
}
}
return;
}
}