From 9d2f6d5983f395d467a516ac4f3355efd303b22a Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Thu, 28 Feb 2013 11:55:07 +0000 Subject: not using GNUNET_PROGRAM_run() as it is eating away the trailing command arguments --- src/testbed/gnunet_testbed_mpi_spawn.c | 143 +++++++++++---------------------- 1 file changed, 48 insertions(+), 95 deletions(-) diff --git a/src/testbed/gnunet_testbed_mpi_spawn.c b/src/testbed/gnunet_testbed_mpi_spawn.c index 2ff1972a6..702ce149d 100644 --- a/src/testbed/gnunet_testbed_mpi_spawn.c +++ b/src/testbed/gnunet_testbed_mpi_spawn.c @@ -1,14 +1,12 @@ #include "platform.h" #include "gnunet_util_lib.h" -#include "gnunet_resolver_service.h" -#include "gnunet_testbed_service.h" #include /** * Generic logging shorthand */ -#define LOG(kind,...) \ - GNUNET_log_from (kind, "gnunet-mpi-test", __VA_ARGS__) +#define LOG(kind,...) \ + fprintf (stderr, __VA_ARGS__) /** * Debug logging shorthand @@ -16,132 +14,87 @@ #define LOG_DEBUG(...) \ LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) -/** - * Timeout for resolving IPs - */ -#define RESOLVE_TIMEOUT \ - GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) - /** * Global result */ static int ret; -/** - * The host list - */ -static struct GNUNET_TESTBED_Host **hosts; /** - * Number of hosts in the host list - */ -static unsigned int nhosts; - -/** - * Main function that will be run by the scheduler. - * - * @param cls closure - * @param args remaining command-line arguments - * @param cfgfile name of the configuration file used (for saving, can be NULL!) - * @param config configuration + * Execution start point */ -static void -run (void *cls, char *const *args, const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *config) +int +main (int argc, char *argv[]) { + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; struct GNUNET_OS_Process *proc; + char **argv2; unsigned long code; enum GNUNET_OS_ProcessStatusType proc_status; int rank; + int chstat; unsigned int host; + unsigned int cnt; + ret = -1; + if (argc < 2) + { + printf ("Need arguments: gnunet-testbed-mpi-spawn "); + return 1; + } + if (MPI_SUCCESS != MPI_Init (&argc, &argv)) + { + GNUNET_break (0); + return 2; + } if (MPI_SUCCESS != MPI_Comm_rank (MPI_COMM_WORLD, &rank)) { GNUNET_break (0); - return; + ret = 3; + goto finalize; } if (0 != rank) { - ret = GNUNET_OK; - return; + ret = 0; + goto finalize; } PRINTF ("Spawning process\n"); + argv2 = GNUNET_malloc (sizeof (char *) * (argc - 1)); + for (cnt = 1; cnt < argc; cnt++) + argv2[cnt - 1] = argv[cnt]; proc = GNUNET_OS_start_process_vap (GNUNET_NO, GNUNET_OS_INHERIT_STD_ALL, NULL, - NULL, args[0], args); + NULL, argv2[0], argv2); if (NULL == proc) { - printf ("Cannot exec\n"); - return; + LOG (GNUNET_ERROR_TYPE_ERROR, "Cannot exec\n"); + ret = 5; + goto finalize; } do { (void) sleep (1); - ret = GNUNET_OS_process_status (proc, &proc_status, &code); + chstat = GNUNET_OS_process_status (proc, &proc_status, &code); } - while (GNUNET_NO == ret); - GNUNET_assert (GNUNET_NO != ret); - if (GNUNET_OK == ret) - { - if (0 != code) - { - LOG (GNUNET_ERROR_TYPE_WARNING, "Child terminated abnormally\n"); - ret = GNUNET_SYSERR; - GNUNET_break (0); - return; - } + while (GNUNET_NO == chstat); + if (GNUNET_OK != chstat) + { + ret = 6; + goto finalize; } - else + if (0 != code) { - ret = GNUNET_SYSERR; - GNUNET_break (0); - return; + LOG (GNUNET_ERROR_TYPE_WARNING, "Child terminated abnormally\n"); + ret = 50 + (int) code; + goto finalize; } - if (0 == (nhosts = GNUNET_TESTBED_hosts_load_from_loadleveler (config, &hosts))) - { - GNUNET_break (0); - ret = GNUNET_SYSERR; - return; - } - for (host = 0; host < nhosts; host++) - GNUNET_TESTBED_host_destroy (hosts[host]); - GNUNET_free (hosts); - hosts = NULL; - ret = GNUNET_OK; -} - - -/** - * Execution start point - */ -int -main (int argc, char *argv[]) -{ - static const struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_END - }; - unsigned int host; - int rres; + ret = 0; - ret = GNUNET_SYSERR; - if (argc < 2) - { - printf ("Need arguments: gnunet-testbed-mpi-spawn "); - return 1; - } - if (MPI_SUCCESS != MPI_Init (&argc, &argv)) - { - GNUNET_break (0); - return 1; - } - rres = - GNUNET_PROGRAM_run (argc, argv, - "gnunet-testbed-mpi-spawn ", - _("Spawns cmd after starting my the MPI run-time"), - options, &run, NULL); + finalize: (void) MPI_Finalize (); - if ((GNUNET_OK == rres) && (GNUNET_OK == ret)) - return 0; - printf ("Something went wrong\n"); - return 1; + if (0 != ret) + LOG (GNUNET_ERROR_TYPE_ERROR, "Something went wrong. Error: %d\n", ret); + return ret; } -- cgit v1.2.3