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