On Thu, Nov 01, 2012 at 06:50:30PM -0400, George Bosilca wrote:
> 
> On Nov 1, 2012, at 16:18 , Nathan Hjelm <hje...@lanl.gov> wrote:
> 
> > On Thu, Nov 01, 2012 at 04:07:32PM -0400, George Bosilca wrote:
> >> Nathan,
> >> 
> >> Here is a quick question regarding the topi framework. 
> >> 
> >> - The mca_topo_base_output is opened unconditionally in topo_base_open.c:62
> >> 
> >> - with your patch, mca_topo_base_output is closed conditionally in 
> >> topo_base_close.c:46, but only in case 
> >> mca_topo_base_components_opened_valid and 
> >> mca_topo_base_components_available_valid are NULL. However, 
> >> mca_topo_base_output is set to -1 in all cases right after.
> >> 
> >> Why is that so?
> > 
> > mca_base_components_close closes the output if the third argument is NULL. 
> > So in this case calling opal_output_close after mca_base_components_close 
> > will result in a second call to opal_output_close.
> 
> Indeed, the behavior of the mca_base_components_close seems quite weird to 
> me, as it lack of consistency.
> - the symmetric function (mca_components_open) doesn't open the output stream
> - the stream is close but the corresponding variable is not set to a 
> meaningful value (-1)

Exactly. There is more inconsistency between the two calls as well. 
mca_base_components_open calls OBJ_CONSTRUCT on the component list but 
mca_base_components_close does not call OBJ_DESTRUCT. Because of this we don't 
always OBJ_DESTRUCT the component list because some frameworks don't do it.

I was going to address this second inconsistency with another patch but now 
seems like a good time to get a see if anyone has an opinion about how this 
should be fixed. I can think of two simple fixes:
1) Since mca_base_components_open calls OBJ_CONSTRUCT should 
mca_base_components_close call OBJ_DESTRUCT?
2) Should the caller be responsible for both the OBJ_CONSTRUCT and OBJ_DESTRUCT 
calls?


> - it force us to have one specific output for each framework

This isn't the case at the moment since frameworks can call opal_output_close 
on any extra output streams. It would be better if frameworks have t close all 
open output streams using opal_output_close instead of using 
mca_base_components_close. If we want to change the semantics of 
mca_base_components_close I can redo this patch. Anyone have an opinion on this?

-Nathan Hjelm
HPC-3, LANL

Reply via email to