From: Augustin Degomme Date: Tue, 3 Apr 2018 23:18:32 +0000 (+0200) Subject: protect against uninitialized/absent smpi X-Git-Tag: v3.20~526 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/8ad8c3d9f2ae83e9e2d04f62791a682fb78e05b7 protect against uninitialized/absent smpi --- diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 2bad6bd56d..d0913c11f4 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -925,7 +925,7 @@ XBT_PUBLIC int smpi_nanosleep(const struct timespec* tp, struct timespec* t); XBT_PUBLIC int smpi_clock_gettime(clockid_t clk_id, struct timespec* tp); #endif XBT_PUBLIC unsigned int smpi_sleep(unsigned int secs); -XBT_PUBLIC int smpi_gettimeofday(struct timeval* tv, void* tz); +XBT_PUBLIC int smpi_gettimeofday(struct timeval* tv, struct timezone* tz); XBT_PUBLIC unsigned long long smpi_rastro_resolution(); XBT_PUBLIC unsigned long long smpi_rastro_timestamp(); XBT_PUBLIC void smpi_sample_1(int global, const char* file, int line, int iters, double threshold); diff --git a/src/smpi/internals/smpi_bench.cpp b/src/smpi/internals/smpi_bench.cpp index 7f1ae4a6cc..65c074f8a0 100644 --- a/src/smpi/internals/smpi_bench.cpp +++ b/src/smpi/internals/smpi_bench.cpp @@ -193,23 +193,32 @@ static unsigned int private_sleep(double secs) unsigned int smpi_sleep(unsigned int secs) { + if (not smpi_process()) + return sleep(secs); return private_sleep(static_cast(secs)); } int smpi_usleep(useconds_t usecs) { + if (not smpi_process()) + return usleep(usecs); return static_cast(private_sleep(static_cast(usecs) / 1000000.0)); } #if _POSIX_TIMERS > 0 -int smpi_nanosleep(const struct timespec* tp, struct timespec* /*t*/) -{ +int smpi_nanosleep(const struct timespec* tp, struct timespec* t) +{ + if (not smpi_process()) + return nanosleep(tp,t); return static_cast(private_sleep(static_cast(tp->tv_sec + tp->tv_nsec / 1000000000.0))); } #endif -int smpi_gettimeofday(struct timeval* tv, void* /*tz*/) +int smpi_gettimeofday(struct timeval* tv, struct timezone* tz) { + if (not smpi_process()) + return gettimeofday(tv, tz); + smpi_bench_end(); double now = SIMIX_get_clock(); if (tv) { @@ -225,8 +234,10 @@ int smpi_gettimeofday(struct timeval* tv, void* /*tz*/) } #if _POSIX_TIMERS > 0 -int smpi_clock_gettime(clockid_t /*clk_id*/, struct timespec* tp) +int smpi_clock_gettime(clockid_t clk_id, struct timespec* tp) { + if (not smpi_process()) + return clock_gettime(clk_id, tp); //there is only one time in SMPI, so clk_id is ignored. smpi_bench_end(); double now = SIMIX_get_clock(); @@ -435,16 +446,20 @@ void smpi_bench_destroy() int smpi_getopt_long (int argc, char *const *argv, const char *options, const struct option * long_options, int *opt_index) { - optind = smpi_process()->get_optind(); + if (smpi_process()) + optind = smpi_process()->get_optind(); int ret = getopt_long (argc, argv, options, long_options, opt_index); - smpi_process()->set_optind(optind); + if (smpi_process()) + smpi_process()->set_optind(optind); return ret; } int smpi_getopt (int argc, char *const *argv, const char *options) { - optind = smpi_process()->get_optind(); + if (smpi_process()) + optind = smpi_process()->get_optind(); int ret = getopt (argc, argv, options); - smpi_process()->set_optind(optind); + if (smpi_process()) + smpi_process()->set_optind(optind); return ret; }