Why not? I use asserts all the time in OMPI code. A quick grep in ompi/mca says I'm not alone. There are a whole bunch of places where I "know" a fact, such as a pointer never being NULL or consistency checks between two values. These don't need to run in production; I've theoretically tested the crap out of the code before then. But they are really useful when developing and debugging later.
Just my $0.02. Brian On 11/4/11 5:18 PM, "Jeff Squyres" <jsquy...@cisco.com> wrote: >+1 -- we shouldn't be using assert(). > > >On Nov 4, 2011, at 2:15 PM, Tim Mattox wrote: > >> I doubt you want to be using assert() here or anywhere in the >> OMPI library. If the rem_info.rem_qps pointer is NULL, I would >> think you want to do something other than just die. >> And, in a production build, if it was to ever be null, things would >> eventually crash right? The ompi library should strive to never >>crash... >> maybe print an error message and abort, but flat out crashing >> seems wrong. >> >> I've been away from active OMPI development for awhile now so I >> might be remembering this incorrectly, but isn't there some >> policy/SOP on not using assert in the OMPI library code? >> >> Please excuse me while I return to being a silent/lurking ghost >> of an OMPI developer. >> >> On Thu, Nov 3, 2011 at 8:15 PM, <cy...@osl.iu.edu> wrote: >>> Author: cyeoh >>> Date: 2011-11-03 20:15:08 EDT (Thu, 03 Nov 2011) >>> New Revision: 25431 >>> URL: https://svn.open-mpi.org/trac/ompi/changeset/25431 >>> >>> Log: >>> Removes pointless memmove which because of a previous memcpy will >>>always >>> have identical source and destination pointers. See #2871 >>> Plugs a couple of minor memory leaks related to remote qp info >>> >>> >>> Text files modified: >>> trunk/ompi/mca/btl/openib/btl_openib_endpoint.c | 3 >>>+++ >>> trunk/ompi/mca/btl/openib/connect/btl_openib_connect_oob.c | 22 >>>++++++++++++---------- >>> 2 files changed, 15 insertions(+), 10 deletions(-) >>> >>> Modified: trunk/ompi/mca/btl/openib/btl_openib_endpoint.c >>> >>>======================================================================== >>>====== >>> --- trunk/ompi/mca/btl/openib/btl_openib_endpoint.c (original) >>> +++ trunk/ompi/mca/btl/openib/btl_openib_endpoint.c 2011-11-03 >>>20:15:08 EDT (Thu, 03 Nov 2011) >>> @@ -452,6 +452,9 @@ >>> free(endpoint->qps); >>> endpoint->qps = NULL; >>> >>> + free(endpoint->rem_info.rem_qps); >>> + free(endpoint->rem_info.rem_srqs); >>> + >>> /* unregister xrc recv qp */ >>> #if HAVE_XRC >>> if (0 != endpoint->xrc_recv_qp_num) { >>> >>> Modified: trunk/ompi/mca/btl/openib/connect/btl_openib_connect_oob.c >>> >>>======================================================================== >>>====== >>> --- trunk/ompi/mca/btl/openib/connect/btl_openib_connect_oob.c >>>(original) >>> +++ trunk/ompi/mca/btl/openib/connect/btl_openib_connect_oob.c >>>2011-11-03 20:15:08 EDT (Thu, 03 Nov 2011) >>> @@ -272,19 +272,14 @@ >>> static int set_remote_info(mca_btl_base_endpoint_t* endpoint, >>> mca_btl_openib_rem_info_t* rem_info) >>> { >>> + /* Free up the memory pointed to by rem_qps before overwriting >>>the pointer >>> + in the following memcpy */ >>> + free(endpoint->rem_info.rem_qps); >>> + >>> /* copy the rem_info stuff */ >>> memcpy(&((mca_btl_openib_endpoint_t*) endpoint)->rem_info, >>> rem_info, sizeof(mca_btl_openib_rem_info_t)); >>> >>> - /* copy over the rem qp info */ >>> - /* per #2871, changed this from memcpy() to memmove() to handle >>> - * the case of overlapping (or same) src/dest addresses. >>> - * However, we still *should* figure out why the src and dest >>> - * addresses are sometimes the same. */ >>> - memmove(endpoint->rem_info.rem_qps, >>> - rem_info->rem_qps, sizeof(mca_btl_openib_rem_qp_info_t) * >>> - mca_btl_openib_component.num_qps); >>> - >>> BTL_VERBOSE(("Setting QP info, LID = %d", >>>endpoint->rem_info.rem_lid)); >>> return OMPI_SUCCESS; >>> } >>> @@ -671,7 +666,12 @@ >>> uint8_t message_type; >>> bool master; >>> >>> - /* start by unpacking data first so we know who is knocking at >>> + /* We later memcpy this whole structure. Make sure >>> + that all the parameters are initialized, especially >>> + the pointers */ >>> + memset(&rem_info,0, sizeof(rem_info)); >>> + >>> + /* start by unpacking data first so we know who is knocking at >>> our door */ >>> BTL_VERBOSE(("unpacking %d of %d\n", cnt, OPAL_UINT8)); >>> rc = opal_dss.unpack(buffer, &message_type, &cnt, OPAL_UINT8); >>> @@ -857,6 +857,7 @@ >>> to CONNECTING, and then reply with our QP >>> information */ >>> if (master) { >>> + assert(rem_info.rem_qps != NULL); >>> rc = reply_start_connect(ib_endpoint, &rem_info); >>> } else { >>> rc = >>>oob_module_start_connect(ib_endpoint->endpoint_local_cpc, >>> @@ -879,6 +880,7 @@ >>> break; >>> >>> case MCA_BTL_IB_CONNECTING : >>> + assert(rem_info.rem_qps != NULL); >>> set_remote_info(ib_endpoint, &rem_info); >>> if (OMPI_SUCCESS != (rc = qp_connect_all(ib_endpoint))) { >>> BTL_ERROR(("endpoint connect error: %d", rc)); >>> _______________________________________________ >>> svn-full mailing list >>> svn-f...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/svn-full >>> >> >> >> >> -- >> Tim Mattox, Ph.D. - http://homepage.mac.com/tmattox/ >> timat...@open-mpi.org || tmat...@gmail.com >> I'm a bright... http://www.the-brights.net/ >> >> _______________________________________________ >> devel mailing list >> de...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/devel > > >-- >Jeff Squyres >jsquy...@cisco.com >For corporate legal information go to: >http://www.cisco.com/web/about/doing_business/legal/cri/ > > >_______________________________________________ >devel mailing list >de...@open-mpi.org >http://www.open-mpi.org/mailman/listinfo.cgi/devel > > -- Brian W. Barrett Dept. 1423: Scalable System Software Sandia National Laboratories