At many places all over the code I see
OBJ_RELEASE(buffer)
buffer = NULL;
Looking at the definition of OBJ_RELEASE() this seems unnecessary and
wrong:
#define OBJ_RELEASE(object) \
do { \
if (0 == opal_obj_update((opal_object_t *) (object), -1)) { \
opal_obj_run_destructors((opal_object_t *) (object)); \
free(object); \
object = NULL; \
} \
} while (0)
The object is set to NULL by the macro and only if the opal_obj_update() was
successful. So it seems setting the buffer manually to NULL after OBJ_RELEASE()
is unnecessary and if opal_obj_update() failed it also is wrong.
Adrian