+
+ xbt_matrix_free(bA);
+ xbt_matrix_free(bB);
+ xbt_matrix_free(bC);
+
+ xbt_matrix_free(mydataA);
+ xbt_matrix_free(mydataB);
+ /* FIXME: some are said to be unknown
+ gras_socket_close(master);
+ gras_socket_close(from);
+ for (l=0; l < PROC_MATRIX_SIZE-1; l++) {
+ if (socket_line[l])
+ gras_socket_close(socket_line[l]);
+ if (socket_row[l])
+ gras_socket_close(socket_row[l]);
+ } */
+
+ return 0;
+}
+
+int slave(int argc, char *argv[])
+{
+ gras_socket_t mysock;
+ gras_socket_t master = NULL;
+ int connected = 0;
+ int rank;
+
+ /* Init the GRAS's infrastructure */
+ gras_init(&argc, argv);
+ amok_pm_init();
+ if (argc != 3 && argc != 2)
+ xbt_die("Usage: slave masterhost:masterport [rank]");
+ if (argc == 2)
+ rank = -1;
+ else
+ rank = atoi(argv[2]);
+
+ /* Register the known messages and my callback */
+ register_messages();
+ gras_cb_register("pmm_slave", pmm_worker_cb);
+
+ /* Create the connexions */
+ mysock = gras_socket_server_range(3000, 9999, 0, 0);
+ XBT_INFO("Sensor %d starting", rank);
+ while (!connected) {
+ xbt_ex_t e;
+ TRY {
+ master = gras_socket_client_from_string(argv[1]);
+ connected = 1;
+ }
+ CATCH(e) {
+ if (e.category != system_error)
+ RETHROW;
+ xbt_ex_free(e);
+ gras_os_sleep(0.5);
+ }
+ }
+
+ /* Join and run the group */
+ rank = amok_pm_group_join(master, "pmm");
+ amok_pm_mainloop(600);
+
+ /* housekeeping */
+ gras_socket_close(mysock);
+ // gras_socket_close(master); Unknown