+
+ if (pd->listener)
+ gras_msg_send(pd->listener->wakeup_sock_master_side, "_wakeup_listener",
+ &kill);
+
+ xbt_thread_join(pd->listener->listener);
+
+ // gras_socket_close(pd->listener->wakeup_sock_master_side); FIXME: uncommenting this leads to deadlock at terminaison
+ xbt_queue_free(&pd->listener->incomming_messages);
+ xbt_queue_free(&pd->listener->socks_to_close);
+ xbt_free(pd->listener);
+}
+
+void gras_msg_listener_awake()
+{
+ gras_procdata_t *pd;
+ char c = '1';
+
+ DEBUG0("Awaking the listener");
+ pd = gras_procdata_get();
+ if (pd->listener) {
+ gras_msg_send(pd->listener->wakeup_sock_master_side, "_wakeup_listener",
+ &c);
+ }
+}
+
+void gras_msg_listener_close_socket(int sd)
+{
+ gras_procdata_t *pd = gras_procdata_get();
+ if (pd->listener) {
+ xbt_queue_push(pd->listener->socks_to_close, &sd);
+ gras_msg_listener_awake();
+ } else {
+ /* do it myself */
+ tcp_close(sd);
+ }