Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Documentation improvement
[simgrid.git] / src / amok / PeerManagement / peermanagement.c
index 3e95db1..5095a7d 100644 (file)
@@ -110,19 +110,19 @@ void amok_pm_mainloop(double timeOut) {
   }
 }
 
-/** \brief kill a buddy identified by its peername and port */
+/** \brief kill a buddy identified by its peername and port. Note that it is not removed from any group it may belong to. */
 void amok_pm_kill_hp(char *name,int port) {
   gras_socket_t sock=gras_socket_client(name,port);
   amok_pm_kill(sock);
   gras_socket_close(sock);
 }
 
-/** \brief kill a buddy to which we have a socket already */
+/** \brief kill a buddy to which we have a socket already. Note that it is not removed from any group it may belong to. */
 void amok_pm_kill(gras_socket_t buddy) {
   gras_msg_send(buddy,gras_msgtype_by_name("amok_pm_kill"),NULL);
 }
 
-/** \brief kill syncronously a buddy (do not return before its death) */
+/** \brief kill syncronously a buddy (do not return before its death). Note that it is not removed from any group it may belong to. */
 void amok_pm_kill_sync(gras_socket_t buddy) {
   gras_msg_rpccall(buddy,30,gras_msgtype_by_name("amok_pm_killrpc"),NULL,NULL);
 }
@@ -140,7 +140,7 @@ xbt_dynar_t amok_pm_group_new(const char *group_name) {
   xbt_assert0(amok_pm_moddata_id != -1,"Run amok_pm_init first!");
   g=gras_moddata_by_id(amok_pm_moddata_id);
 
-  INFO1("retrieved groups=%p",g->groups);
+  DEBUG1("retrieved groups=%p",g->groups);
    
   xbt_dict_set(g->groups,group_name,res,NULL); /*FIXME: leaking xbt_dynar_free_voidp);*/
   VERB1("Group %s created",group_name);
@@ -209,12 +209,14 @@ void amok_pm_group_shutdown_remote(gras_socket_t master, const char *group_name)
 static void _amok_pm_init(void) {
    /* no world-wide globals */
    /* Datatype and message declarations */
+   gras_datadesc_type_t pm_group_type = gras_datadesc_dynar(gras_datadesc_by_name("xbt_peer_t"), xbt_peer_free_voidp);
+   
    gras_msgtype_declare("amok_pm_kill",NULL);   
    gras_msgtype_declare_rpc("amok_pm_killrpc",NULL,NULL);   
    
    gras_msgtype_declare_rpc("amok_pm_get",
                            gras_datadesc_by_name("string"),
-                           gras_datadesc_by_name("xbt_dynar_t"));
+                           pm_group_type);
    gras_msgtype_declare_rpc("amok_pm_join",
                            gras_datadesc_by_name("string"),
                            NULL);
@@ -230,10 +232,11 @@ static void _amok_pm_init(void) {
 static void _amok_pm_join(void *p) {
    /* moddata management */
    amok_pm_moddata_t mod = (amok_pm_moddata_t)p;
+
+   mod->groups = NULL;
    
    mod->done = 0;
    mod->groups = xbt_dict_new();
-   INFO1("groups=%p",mod->groups);
    
    /* callbacks */
   gras_cb_register(gras_msgtype_by_name("amok_pm_kill"),
@@ -251,29 +254,30 @@ static void _amok_pm_join(void *p) {
                   &amok_pm_cb_shutdown);   
 }
 static void _amok_pm_exit(void) {
-   /* no world-wide globals */
+  /* no world-wide globals */
 }
 static void _amok_pm_leave(void *p) {
    /* moddata */
    amok_pm_moddata_t mod = (amok_pm_moddata_t)p;
    
-   xbt_dict_free(&mod->groups);
+   if (mod->groups)
+     xbt_dict_free(&mod->groups);
    
    /* callbacks */
    gras_cb_unregister(gras_msgtype_by_name("amok_pm_kill"),
                      &amok_pm_cb_kill);
-  gras_cb_unregister(gras_msgtype_by_name("amok_pm_killrpc"),
-                    &amok_pm_cb_killrpc);
-
-  gras_cb_unregister(gras_msgtype_by_name("amok_pm_get"),
-                    &amok_pm_cb_get);
-  gras_cb_unregister(gras_msgtype_by_name("amok_pm_join"),
-                    &amok_pm_cb_join);
-  gras_cb_unregister(gras_msgtype_by_name("amok_pm_leave"),
-                    &amok_pm_cb_leave);
-
-  gras_cb_unregister(gras_msgtype_by_name("amok_pm_shutdown"),
-                    &amok_pm_cb_shutdown);
+   gras_cb_unregister(gras_msgtype_by_name("amok_pm_killrpc"),
+                     &amok_pm_cb_killrpc);
+
+   gras_cb_unregister(gras_msgtype_by_name("amok_pm_get"),
+                     &amok_pm_cb_get);
+   gras_cb_unregister(gras_msgtype_by_name("amok_pm_join"),
+                     &amok_pm_cb_join);
+   gras_cb_unregister(gras_msgtype_by_name("amok_pm_leave"),
+                     &amok_pm_cb_leave);
+
+   gras_cb_unregister(gras_msgtype_by_name("amok_pm_shutdown"),
+                     &amok_pm_cb_shutdown);
 }
 
 void amok_pm_modulecreate() {