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;
*dst = sock;
- xbt_dynar_push(((gras_trp_procdata_t)
- gras_libdata_by_id(gras_trp_libdata_id))->sockets,dst);
XBT_OUT;
}
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;
}
/**
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;
}
/**
- * 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
/** \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);
/* 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);
}
}
WARN1("Ignoring request to free an unknown socket (%p). Execution stack:",sock);
- xbt_backtrace_display();
+ xbt_backtrace_display_current();
}
XBT_OUT;
}
/*
* 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");
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;
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);