Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Assert that the log categories are unique
[simgrid.git] / teshsuite / smpi / gh-139 / gh-139.c
index df3b5036c6a2865cf3148f8e53bea647bac098e7..f1a9c57ad2972a743220a4c5127ad94ec99ba23f 100644 (file)
@@ -1,12 +1,12 @@
-/* Copyright (c) 2019. The SimGrid Team.
+/* Copyright (c) 2019-2021. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include <mpi.h>
-#include <simgrid/msg.h>
-#include <simgrid/simix.h>
+#include <simgrid/actor.h>
+#include <simgrid/host.h>
 #include <stdio.h>
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(smpi_test, "Messages specific for this SMPI example");
@@ -27,27 +27,24 @@ void* req_wait(void* bar);
 
 // Thread creation helper
 
-static int thread_create_wrapper(int argc, char* argv[])
+static void thread_create_wrapper(XBT_ATTRIB_UNUSED int argc, XBT_ATTRIB_UNUSED char* argv[])
 {
   int the_global_rank  = global_rank;
-  struct threadwrap* t = (struct threadwrap*)sg_actor_self_data();
+  struct threadwrap* t = (struct threadwrap*)sg_actor_self_get_data();
   XBT_INFO("new thread has parameter rank %d and global variable rank %d", ((struct param*)(t->param))->rank,
            the_global_rank);
-  sg_actor_self_data_set(t->father_data);
+  SMPI_thread_create();
   t->f(t->param);
-  sg_actor_self_data_set(NULL);
   free(t);
-  return 0;
 }
 
 static void mpi_thread_create(const char* name, void* (*f)(void*), void* param)
 {
   struct threadwrap* threadwrap = (struct threadwrap*)malloc(sizeof(*threadwrap));
-  threadwrap->father_data       = sg_actor_self_data();
   threadwrap->f                 = f;
   threadwrap->param             = param;
   sg_actor_t actor              = sg_actor_init(name, sg_host_self());
-  sg_actor_data_set(actor, threadwrap);
+  sg_actor_set_data(actor, threadwrap);
   sg_actor_start(actor, thread_create_wrapper, 0, NULL);
 }
 
@@ -66,13 +63,15 @@ void* req_wait(void* bar)
   struct param* param = (struct param*)bar;
   int rank;
   MPI_Status status;
-
+  char err_string[1024];
+  int length = 1024;
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
   XBT_INFO("%d has MPI rank %d and global variable rank %d", param->rank, rank, global_rank);
   XBT_INFO("%d waiting request", rank);
-  MPI_Wait(param->req, &status);
-  XBT_INFO("%d request done", rank);
+  int ret = MPI_Wait(param->req, &status);
+  MPI_Error_string(ret, err_string, &length);
+  XBT_INFO("%d request done, return %s", rank, err_string);
   XBT_INFO("%d still has MPI rank %d and global variable %d", param->rank, rank, global_rank);
   free(param);
   return NULL;
@@ -80,8 +79,9 @@ void* req_wait(void* bar)
 
 int main(int argc, char* argv[])
 {
-  int rank, size;
-  char c;
+  int rank;
+  int size;
+  char c = 0;
   MPI_Request req;
   MPI_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);