Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
protect against uninitialized/absent smpi
authorAugustin Degomme <augustin.degomme@unibas.ch>
Tue, 3 Apr 2018 23:18:32 +0000 (01:18 +0200)
committerAugustin Degomme <augustin.degomme@unibas.ch>
Tue, 3 Apr 2018 23:18:32 +0000 (01:18 +0200)
include/smpi/smpi.h
src/smpi/internals/smpi_bench.cpp

index 2bad6bd..d0913c1 100644 (file)
@@ -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);
index 7f1ae4a..65c074f 100644 (file)
@@ -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<double>(secs));
 }
 
 int smpi_usleep(useconds_t usecs)
 {
+  if (not smpi_process())
+    return usleep(usecs);
   return static_cast<int>(private_sleep(static_cast<double>(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<int>(private_sleep(static_cast<double>(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;
 }