A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix some SMPI+MC bugs
[simgrid.git]
/
src
/
smpi
/
smpi_global.c
diff --git
a/src/smpi/smpi_global.c
b/src/smpi/smpi_global.c
index
47d5639
..
0ff30a4
100644
(file)
--- a/
src/smpi/smpi_global.c
+++ b/
src/smpi/smpi_global.c
@@
-2,7
+2,7
@@
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* 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. */
+ * under the terms of the license (GNU LGPL) which comes with this package. */
#include "private.h"
#include "smpi_mpi_dt_private.h"
#include "private.h"
#include "smpi_mpi_dt_private.h"
@@
-29,7
+29,7
@@
typedef struct s_smpi_process_data {
MPI_Comm comm_self;
void *data; /* user data */
int index;
MPI_Comm comm_self;
void *data; /* user data */
int index;
-
int initialized
;
+
char state
;
int sampling; /* inside an SMPI_SAMPLE_ block? */
} s_smpi_process_data_t;
int sampling; /* inside an SMPI_SAMPLE_ block? */
} s_smpi_process_data_t;
@@
-90,7
+90,7
@@
void smpi_process_init(int *argc, char ***argv)
void smpi_process_destroy(void)
{
int index = smpi_process_index();
void smpi_process_destroy(void)
{
int index = smpi_process_index();
- process_data[index]->
index = -100
;
+ process_data[index]->
state = SMPI_FINALIZED
;
XBT_DEBUG("<%d> Process left the game", index);
}
XBT_DEBUG("<%d> Process left the game", index);
}
@@
-100,6
+100,7
@@
void smpi_process_destroy(void)
void smpi_process_finalize(void)
{
// wait for all pending asynchronous comms to finish
void smpi_process_finalize(void)
{
// wait for all pending asynchronous comms to finish
+ if(!MC_is_active())
while (SIMIX_process_has_pending_comms(SIMIX_process_self())) {
simcall_process_sleep(0.01);
}
while (SIMIX_process_has_pending_comms(SIMIX_process_self())) {
simcall_process_sleep(0.01);
}
@@
-110,8
+111,11
@@
void smpi_process_finalize(void)
*/
int smpi_process_finalized()
{
*/
int smpi_process_finalized()
{
- return (smpi_process_index() == -100);
- // If finalized, this value has been set to -100;
+ int index = smpi_process_index();
+ if (index != MPI_UNDEFINED)
+ return (process_data[index]->state == SMPI_FINALIZED);
+ else
+ return 0;
}
/**
}
/**
@@
-120,8
+124,8
@@
int smpi_process_finalized()
int smpi_process_initialized(void)
{
int index = smpi_process_index();
int smpi_process_initialized(void)
{
int index = smpi_process_index();
- return (
(index != -100) &&
(index != MPI_UNDEFINED)
- && (process_data[index]->
initialized
));
+ return ( (index != MPI_UNDEFINED)
+ && (process_data[index]->
state == SMPI_INITIALIZED
));
}
/**
}
/**
@@
-130,8
+134,8
@@
int smpi_process_initialized(void)
void smpi_process_mark_as_initialized(void)
{
int index = smpi_process_index();
void smpi_process_mark_as_initialized(void)
{
int index = smpi_process_index();
- if ((index !=
-100) && (index != MPI_UNDEFIN
ED))
- process_data[index]->
initialized = 1
;
+ if ((index !=
MPI_UNDEFINED) && (!process_data[index]->state != SMPI_FINALIZ
ED))
+ process_data[index]->
state = SMPI_INITIALIZED
;
}
}
@@
-321,7
+325,7
@@
void smpi_global_init(void)
if (MC_is_active())
MC_ignore_heap(process_data[i]->timer, xbt_os_timer_size());
process_data[i]->comm_self = MPI_COMM_NULL;
if (MC_is_active())
MC_ignore_heap(process_data[i]->timer, xbt_os_timer_size());
process_data[i]->comm_self = MPI_COMM_NULL;
- process_data[i]->
initialized = 0
;
+ process_data[i]->
state = SMPI_UNINITIALIZED
;
process_data[i]->sampling = 0;
}
group = smpi_group_new(process_count);
process_data[i]->sampling = 0;
}
group = smpi_group_new(process_count);