+ if (SIMIX_process_self() != NULL) {
+ pd->ppid = gras_os_getpid();
+ } else
+ pd->ppid = -1;
+
+ trp_pd->msg_selectable_sockets = xbt_queue_new(0, sizeof(gras_socket_t));
+
+ trp_pd->meas_selectable_sockets = xbt_queue_new(0, sizeof(gras_socket_t));
+
+ VERB2("Creating process '%s' (%d)",
+ SIMIX_process_get_name(SIMIX_process_self()), gras_os_getpid());
+}
+
+void gras_process_exit()
+{
+ xbt_dynar_t sockets =
+ ((gras_trp_procdata_t) gras_libdata_by_name("gras_trp"))->sockets;
+ gras_socket_t sock_iter;
+ unsigned int cursor;
+ gras_hostdata_t *hd =
+ (gras_hostdata_t *) SIMIX_host_get_data(SIMIX_host_self());
+ gras_procdata_t *pd =
+ (gras_procdata_t *) SIMIX_process_get_data(SIMIX_process_self());
+
+ gras_msg_procdata_t msg_pd =
+ (gras_msg_procdata_t) gras_libdata_by_name("gras_msg");
+ gras_trp_procdata_t trp_pd =
+ (gras_trp_procdata_t) gras_libdata_by_name("gras_trp");
+
+ xbt_queue_free(&trp_pd->msg_selectable_sockets);
+
+ xbt_queue_free(&trp_pd->meas_selectable_sockets);
+
+
+ xbt_assert0(hd, "Run gras_process_init (ie, gras_init)!!");
+
+ VERB2("GRAS: Finalizing process '%s' (%d)",
+ SIMIX_process_get_name(SIMIX_process_self()), gras_os_getpid());
+
+ if (xbt_dynar_length(msg_pd->msg_queue)) {
+ unsigned int cpt;
+ s_gras_msg_t msg;
+ WARN2("process %d terminated, but %ld messages are still queued. Message list:",
+ gras_os_getpid(),xbt_dynar_length(msg_pd->msg_queue));
+ xbt_dynar_foreach(msg_pd->msg_queue,cpt, msg) {
+ WARN5(" Message %s (%s) from %s@%s:%d",msg.type->name,e_gras_msg_kind_names[msg.kind],
+ gras_socket_peer_proc(msg.expe),gras_socket_peer_name(msg.expe),gras_socket_peer_port(msg.expe));