The problem started with the compiler complaining about using a non
initialized variable. When I looked into the code, I just planned to
initialize it with some default value to make the compiler stop
complaining. But then I realize that all the ifs between the moment
where this buffer get initialized and the moment where it get freed,
have to release it before calling return (error cases). So my choices
were: either to add ifs around all these OBJ_RELEASE or to move the
allocation outside the if, in such a way that everybody can safely
release it. I choose the approach that have a minimum impact in
number of lines of code (I'm not a fanatic of copy & paste). It's
definitively not a performance critical code, so one more memory
allocation will have a zero impact.
george.
On Jul 20, 2007, at 7:32 AM, Ralph Castain wrote:
I guess I really don't understand this change. How is it better that I
*always* malloc a buffer that I might never use, just so I can
*always*
release it - versus *only* malloc'ing and releasing a buffer when I
know I
need it??
I don't really care, but this seems kinda wasteful and I would like to
understand the benefit.
Thanks
Ralph
On 7/19/07 10:06 PM, "bosi...@osl.iu.edu" <bosi...@osl.iu.edu> wrote:
Author: bosilca
Date: 2007-07-20 00:06:39 EDT (Fri, 20 Jul 2007)
New Revision: 15533
URL: https://svn.open-mpi.org/trac/ompi/changeset/15533
Log:
Always release the buffer (this imply the buffer has to be created
outside the special case).
Text files modified:
trunk/orte/orted/orted_main.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
Modified: trunk/orte/orted/orted_main.c
=====================================================================
=========
--- trunk/orte/orted/orted_main.c (original)
+++ trunk/orte/orted/orted_main.c 2007-07-20 00:06:39 EDT (Fri, 20
Jul 2007)
@@ -391,8 +391,8 @@
}
/* if we are not a seed, prep a return buffer to say we
started okay */
+ buffer = OBJ_NEW(orte_buffer_t);
if (!orte_process_info.seed) {
- buffer = OBJ_NEW(orte_buffer_t);
if (ORTE_SUCCESS != (ret = orte_dss.pack(buffer, &zero, 1,
ORTE_INT))) {
ORTE_ERROR_LOG(ret);
OBJ_RELEASE(buffer);
@@ -459,6 +459,7 @@
if (ORTE_SUCCESS != (ret = orte_ns.get_jobid_string
(&jobidstring,
orte_process_info.my_name))) {
ORTE_ERROR_LOG(ret);
+ OBJ_RELEASE(buffer);
return ret;
}
@@ -509,6 +510,7 @@
ORTE_RML_NON_PERSISTENT,
orte_daemon_recv_gate, NULL);
if (ret != ORTE_SUCCESS && ret != ORTE_ERR_NOT_IMPLEMENTED) {
ORTE_ERROR_LOG(ret);
+ OBJ_RELEASE(buffer);
return ret;
}
@@ -547,8 +549,8 @@
OBJ_RELEASE(buffer);
return ret;
}
- OBJ_RELEASE(buffer); /* done with this */
}
+ OBJ_RELEASE(buffer); /* done with this */
if (orte_debug_daemons_flag) {
opal_output(0, "%s orted: up and running - waiting for
commands!",
ORTE_NAME_PRINT(orte_process_info.my_name));
_______________________________________________
svn mailing list
s...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/svn
_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel