@@ -41,33 +41,20 @@ struct mca_monitoring_coll_data_t {
41
41
/* Collectives operation monitoring */
42
42
static opal_hash_table_t * comm_data = NULL ;
43
43
44
- /* Check whether the communicator's name have been changed. Update the
45
- * data->comm_name field if so.
46
- */
47
- static inline void mca_common_monitoring_coll_check_name (mca_monitoring_coll_data_t * data )
48
- {
49
- if ( data -> comm_name && data -> p_comm && (data -> p_comm -> c_flags & OMPI_COMM_NAMEISSET )
50
- && 0 < strlen (data -> p_comm -> c_name )
51
- && 0 != strncmp (data -> p_comm -> c_name , data -> comm_name , OPAL_MAX_OBJECT_NAME - 1 ) )
52
- {
53
- free (data -> comm_name );
54
- data -> comm_name = strdup (data -> p_comm -> c_name );
55
- }
56
- }
57
-
58
44
static inline void mca_common_monitoring_coll_cache (mca_monitoring_coll_data_t * data )
59
45
{
60
- if ( NULL == data -> comm_name && 0 < strlen (data -> p_comm -> c_name ) ) {
46
+ if ( data -> is_released ) {
47
+ /* As long as the data struct is not released, we still have the communicator to
48
+ immediately fetch the communicator's name */
61
49
data -> comm_name = strdup (data -> p_comm -> c_name );
62
- } else {
63
- mca_common_monitoring_coll_check_name (data );
64
50
}
65
51
if ( -1 == data -> world_rank ) {
66
52
/* Get current process world_rank */
67
53
mca_common_monitoring_get_world_rank (ompi_comm_rank (data -> p_comm ), data -> p_comm ,
68
54
& data -> world_rank );
69
55
}
70
- /* Only list procs if the hashtable is already initialized, ie if the previous call worked */
56
+ /* Only list procs if the hashtable is already initialized,
57
+ i.e. if the previous call worked */
71
58
if ( (-1 != data -> world_rank ) && (NULL == data -> procs || 0 == strlen (data -> procs )) ) {
72
59
int i , pos = 0 , size , world_size = -1 , max_length , world_rank ;
73
60
char * tmp_procs ;
@@ -100,9 +87,7 @@ mca_monitoring_coll_data_t*mca_common_monitoring_coll_new( ompi_communicator_t*c
100
87
return NULL ;
101
88
}
102
89
103
- data -> procs = NULL ;
104
- data -> comm_name = NULL ;
105
- data -> p_comm = comm ;
90
+ data -> p_comm = comm ;
106
91
107
92
/* Allocate hashtable */
108
93
if ( NULL == comm_data ) {
@@ -137,8 +122,8 @@ void mca_common_monitoring_coll_release(mca_monitoring_coll_data_t*data)
137
122
#endif /* OPAL_ENABLE_DEBUG */
138
123
139
124
/* not flushed yet */
140
- mca_common_monitoring_coll_cache (data );
141
125
data -> is_released = 1 ;
126
+ mca_common_monitoring_coll_cache (data );
142
127
}
143
128
144
129
static void mca_common_monitoring_coll_cond_release (mca_monitoring_coll_data_t * data )
@@ -169,16 +154,15 @@ void mca_common_monitoring_coll_finalize( void )
169
154
170
155
void mca_common_monitoring_coll_flush (FILE * pf , mca_monitoring_coll_data_t * data )
171
156
{
172
- /* Check for any change in the communicator's name */
173
- mca_common_monitoring_coll_check_name (data );
174
-
175
157
/* Flush data */
176
158
fprintf (pf ,
177
159
"D\t%s\tprocs: %s\n"
178
160
"O2A\t%" PRId32 "\t%zu bytes\t%zu msgs sent\n"
179
161
"A2O\t%" PRId32 "\t%zu bytes\t%zu msgs sent\n"
180
162
"A2A\t%" PRId32 "\t%zu bytes\t%zu msgs sent\n" ,
181
- data -> comm_name ? data -> comm_name : "(no-name)" , data -> procs ,
163
+ data -> p_comm ? data -> p_comm -> c_name
164
+ : data -> comm_name ? data -> comm_name : "(no-name)" ,
165
+ data -> procs ,
182
166
data -> world_rank , data -> o2a_size , data -> o2a_count ,
183
167
data -> world_rank , data -> a2o_size , data -> a2o_count ,
184
168
data -> world_rank , data -> a2a_size , data -> a2a_count );
0 commit comments