Clean up a few memory leaks - more to go...
This commit was SVN r7134.
Этот коммит содержится в:
родитель
f4de8776a6
Коммит
76e622a552
@ -25,6 +25,7 @@
|
||||
|
||||
|
||||
#define SIZE_OF_CHAR (sizeof(char) * 8)
|
||||
#define DEFAULT_BITMAP_SIZE 64
|
||||
|
||||
static void orte_bitmap_construct(orte_bitmap_t *bm);
|
||||
static void orte_bitmap_destruct(orte_bitmap_t *bm);
|
||||
@ -36,9 +37,14 @@ OBJ_CLASS_INSTANCE(orte_bitmap_t, opal_object_t,
|
||||
static void
|
||||
orte_bitmap_construct(orte_bitmap_t *bm)
|
||||
{
|
||||
bm->legal_numbits = 0;
|
||||
bm->array_size = 0;
|
||||
bm->bitmap = NULL;
|
||||
size_t size;
|
||||
|
||||
size = DEFAULT_BITMAP_SIZE / SIZE_OF_CHAR;
|
||||
|
||||
bm->array_size = size + ((size % SIZE_OF_CHAR == 0) ? 0 : 1);
|
||||
bm->bitmap = (unsigned char *) malloc(bm->array_size);
|
||||
bm->legal_numbits = SIZE_OF_CHAR*bm->array_size;
|
||||
memset(bm->bitmap, 0, bm->array_size);
|
||||
}
|
||||
|
||||
|
||||
@ -51,32 +57,6 @@ orte_bitmap_destruct(orte_bitmap_t *bm)
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
orte_bitmap_init(orte_bitmap_t *bm, size_t size)
|
||||
{
|
||||
size_t actual_size;
|
||||
|
||||
if (NULL == bm) {
|
||||
ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
|
||||
return ORTE_ERR_BAD_PARAM;
|
||||
}
|
||||
|
||||
actual_size = size / SIZE_OF_CHAR;
|
||||
|
||||
actual_size += (size % SIZE_OF_CHAR == 0) ? 0 : 1;
|
||||
bm->bitmap = (unsigned char *) malloc(actual_size);
|
||||
if (NULL == bm->bitmap) {
|
||||
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
|
||||
return ORTE_ERR_OUT_OF_RESOURCE;
|
||||
}
|
||||
|
||||
bm->array_size = actual_size;
|
||||
bm->legal_numbits = SIZE_OF_CHAR*actual_size;
|
||||
orte_bitmap_clear_all_bits(bm);
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
orte_bitmap_resize(orte_bitmap_t *bm, size_t bit)
|
||||
{
|
||||
|
@ -58,17 +58,6 @@ typedef struct orte_bitmap_t orte_bitmap_t;
|
||||
|
||||
OMPI_DECLSPEC OBJ_CLASS_DECLARATION(orte_bitmap_t);
|
||||
|
||||
/**
|
||||
* Initializes the bitmap and sets its size. This must be called
|
||||
* before the bitmap can be actually used
|
||||
*
|
||||
* @param bitmap The input bitmap (IN)
|
||||
* @param size The initial size of the bitmap in terms of bits (IN)
|
||||
* @return ORTE error code or success
|
||||
*
|
||||
*/
|
||||
OMPI_DECLSPEC int orte_bitmap_init (orte_bitmap_t *bm, size_t size);
|
||||
|
||||
|
||||
/**
|
||||
* Sizes the bitmap to ensure it has at least the specified number of
|
||||
|
@ -275,10 +275,7 @@ orte_gpr_base_module_t *orte_gpr_replica_init(bool *allow_multi_user_threads, bo
|
||||
}
|
||||
orte_gpr_replica_globals.num_acted_upon = 0;
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_bitmap_init(&(orte_gpr_replica_globals.srch_itag), 64))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return NULL;
|
||||
}
|
||||
OBJ_CONSTRUCT(&(orte_gpr_replica_globals.srch_itag), orte_bitmap_t);
|
||||
|
||||
if (orte_gpr_replica_globals.debug) {
|
||||
opal_output(0, "nb receive setup");
|
||||
@ -316,12 +313,16 @@ int orte_gpr_replica_finalize(void)
|
||||
size_t i, j;
|
||||
orte_gpr_replica_segment_t** seg;
|
||||
orte_gpr_replica_trigger_t** trig;
|
||||
orte_gpr_replica_subscription_t** subs;
|
||||
orte_gpr_replica_callbacks_t* cb;
|
||||
orte_gpr_replica_local_subscriber_t **lsubs;
|
||||
orte_gpr_replica_local_trigger_t **ltrigs;
|
||||
|
||||
if (orte_gpr_replica_globals.debug) {
|
||||
opal_output(0, "finalizing gpr replica");
|
||||
}
|
||||
|
||||
if (NULL != orte_gpr_replica.segments) {
|
||||
seg = (orte_gpr_replica_segment_t**)(orte_gpr_replica.segments)->addr;
|
||||
for (i=0, j=0; j < orte_gpr_replica.num_segs &&
|
||||
i < (orte_gpr_replica.segments)->size; i++) {
|
||||
@ -331,7 +332,9 @@ int orte_gpr_replica_finalize(void)
|
||||
}
|
||||
}
|
||||
OBJ_RELEASE(orte_gpr_replica.segments);
|
||||
}
|
||||
|
||||
if (NULL != orte_gpr_replica.triggers) {
|
||||
trig = (orte_gpr_replica_trigger_t**)(orte_gpr_replica.triggers)->addr;
|
||||
for (i=0, j=0; j < orte_gpr_replica.num_trigs &&
|
||||
i < (orte_gpr_replica.triggers)->size; i++) {
|
||||
@ -341,6 +344,19 @@ int orte_gpr_replica_finalize(void)
|
||||
}
|
||||
}
|
||||
OBJ_RELEASE(orte_gpr_replica.triggers);
|
||||
}
|
||||
|
||||
if (NULL != orte_gpr_replica.subscriptions) {
|
||||
subs = (orte_gpr_replica_subscription_t**)(orte_gpr_replica.subscriptions)->addr;
|
||||
for (i=0, j=0; j < orte_gpr_replica.num_subs &&
|
||||
i < (orte_gpr_replica.subscriptions)->size; i++) {
|
||||
if (NULL != subs[i]) {
|
||||
j++;
|
||||
OBJ_RELEASE(subs[i]);
|
||||
}
|
||||
}
|
||||
OBJ_RELEASE(orte_gpr_replica.subscriptions);
|
||||
}
|
||||
|
||||
while (NULL != (cb = (orte_gpr_replica_callbacks_t*)opal_list_remove_first(&orte_gpr_replica.callbacks))) {
|
||||
OBJ_RELEASE(cb);
|
||||
@ -348,6 +364,31 @@ int orte_gpr_replica_finalize(void)
|
||||
OBJ_DESTRUCT(&orte_gpr_replica.callbacks);
|
||||
|
||||
|
||||
/* clear the local subscriptions and triggers */
|
||||
lsubs = (orte_gpr_replica_local_subscriber_t**)(orte_gpr_replica_globals.local_subscriptions)->addr;
|
||||
if (NULL != orte_gpr_replica_globals.local_subscriptions) {
|
||||
for (i=0, j=0; j < orte_gpr_replica_globals.num_local_subs &&
|
||||
i < (orte_gpr_replica_globals.local_subscriptions)->size; i++) {
|
||||
if (NULL != lsubs[i]) {
|
||||
j++;
|
||||
OBJ_RELEASE(lsubs[i]);
|
||||
}
|
||||
}
|
||||
OBJ_RELEASE(orte_gpr_replica_globals.local_subscriptions);
|
||||
}
|
||||
|
||||
ltrigs = (orte_gpr_replica_local_trigger_t**)(orte_gpr_replica_globals.local_triggers)->addr;
|
||||
if (NULL != orte_gpr_replica_globals.local_triggers) {
|
||||
for (i=0, j=0; j < orte_gpr_replica_globals.num_local_trigs &&
|
||||
i < (orte_gpr_replica_globals.local_triggers)->size; i++) {
|
||||
if (NULL != ltrigs[i]) {
|
||||
j++;
|
||||
OBJ_RELEASE(ltrigs[i]);
|
||||
}
|
||||
}
|
||||
OBJ_RELEASE(orte_gpr_replica_globals.local_triggers);
|
||||
}
|
||||
|
||||
/* clean up the globals */
|
||||
|
||||
if (NULL != orte_gpr_replica_globals.srch_cptr) {
|
||||
@ -358,6 +399,10 @@ int orte_gpr_replica_finalize(void)
|
||||
OBJ_RELEASE(orte_gpr_replica_globals.overwritten);
|
||||
}
|
||||
|
||||
if (NULL != orte_gpr_replica_globals.sub_ptrs) {
|
||||
OBJ_RELEASE(orte_gpr_replica_globals.sub_ptrs);
|
||||
}
|
||||
|
||||
if (NULL != orte_gpr_replica_globals.srch_ival) {
|
||||
OBJ_RELEASE(orte_gpr_replica_globals.srch_ival);
|
||||
}
|
||||
@ -366,6 +411,8 @@ int orte_gpr_replica_finalize(void)
|
||||
OBJ_RELEASE(orte_gpr_replica_globals.acted_upon);
|
||||
}
|
||||
|
||||
OBJ_DESTRUCT(&(orte_gpr_replica_globals.srch_itag));
|
||||
|
||||
/* All done */
|
||||
if (orte_gpr_replica_globals.isolate) {
|
||||
return ORTE_SUCCESS;
|
||||
|
@ -715,7 +715,7 @@ int mca_oob_tcp_init(void)
|
||||
int rc;
|
||||
opal_list_item_t* item;
|
||||
char *tmp, *tmp2, *tmp3;
|
||||
size_t num_tokens;
|
||||
size_t i, num_tokens;
|
||||
|
||||
/* random delay to stagger connections back to seed */
|
||||
#if defined(WIN32)
|
||||
@ -860,6 +860,11 @@ int mca_oob_tcp_init(void)
|
||||
}
|
||||
|
||||
free(segment);
|
||||
for(i=0; i < num_tokens; i++) {
|
||||
free(tokens[i]);
|
||||
tokens[i] = NULL;
|
||||
}
|
||||
if (NULL != tokens) free(tokens);
|
||||
free(values[0].byteobject.bytes);
|
||||
free(values[1].strptr);
|
||||
|
||||
@ -951,7 +956,8 @@ char* mca_oob_tcp_get_addr(void)
|
||||
if(ptr != contact_info) {
|
||||
ptr += sprintf(ptr, ";");
|
||||
}
|
||||
ptr += sprintf(ptr, "tcp://%s:%d", inet_ntoa(addr.sin_addr), ntohs(mca_oob_tcp_component.tcp_listen_port));
|
||||
ptr += sprintf(ptr, "tcp://%s:%d", inet_ntoa(addr.sin_addr),
|
||||
ntohs(mca_oob_tcp_component.tcp_listen_port));
|
||||
}
|
||||
return contact_info;
|
||||
}
|
||||
|
@ -126,6 +126,8 @@ int orte_rmgr_base_proc_stage_gate_init(orte_jobid_t job)
|
||||
if (ORTE_SUCCESS != (rc = orte_schema.get_std_trigger_name(&trig_name,
|
||||
trig_names[i], job))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
free(tokens[0]);
|
||||
free(segment);
|
||||
free(trig_keys[0]);
|
||||
free(trig_keys[1]);
|
||||
return rc;
|
||||
@ -137,6 +139,8 @@ int orte_rmgr_base_proc_stage_gate_init(orte_jobid_t job)
|
||||
segment, tokens, 2, trig_keys,
|
||||
orte_rmgr_base_proc_stage_gate_mgr, NULL))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
free(tokens[0]);
|
||||
free(segment);
|
||||
free(trig_name);
|
||||
free(trig_keys[0]);
|
||||
free(trig_keys[1]);
|
||||
@ -155,6 +159,9 @@ int orte_rmgr_base_proc_stage_gate_init(orte_jobid_t job)
|
||||
if (ORTE_SUCCESS != (rc = orte_schema.get_std_trigger_name(&trig_name,
|
||||
ORTE_NUM_ABORTED_TRIGGER, job))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
free(tokens[0]);
|
||||
free(segment);
|
||||
free(trig_keys[0]);
|
||||
return rc;
|
||||
}
|
||||
trig_level = 1;
|
||||
@ -165,10 +172,14 @@ int orte_rmgr_base_proc_stage_gate_init(orte_jobid_t job)
|
||||
segment, tokens, 1, trig_keys, &trig_level,
|
||||
orte_rmgr_base_proc_stage_gate_mgr_abort, NULL))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
free(tokens[0]);
|
||||
free(segment);
|
||||
free(trig_name);
|
||||
free(trig_keys[0]);
|
||||
return rc;
|
||||
}
|
||||
free(tokens[0]);
|
||||
free(segment);
|
||||
free(trig_name);
|
||||
free(trig_keys[0]);
|
||||
|
||||
|
@ -95,8 +95,10 @@ orte_sds_base_basic_contact_universe(void)
|
||||
pid = getpid();
|
||||
if (0 > asprintf(&orte_universe_info.name, "%s-%d", universe, (int)pid)) {
|
||||
opal_output(0, "orte_init: failed to create unique universe name");
|
||||
free(universe);
|
||||
return ret;
|
||||
}
|
||||
free(universe);
|
||||
} else { /* user-specified name - abort */
|
||||
opal_output(0, "orte_init: could not contact the specified universe name %s",
|
||||
orte_universe_info.name);
|
||||
|
@ -1603,7 +1603,7 @@ static bool test14(void)
|
||||
for(i=0; i<NUM_ELEMS; i++) {
|
||||
src[i] = OBJ_NEW(orte_gpr_notify_data_t);
|
||||
if (i % 2) { /* test half with a name and with remove=true */
|
||||
src[i]->name = strdup("test-notify-data-name");
|
||||
src[i]->target = strdup("test-notify-data-name");
|
||||
src[i]->remove = true;
|
||||
}
|
||||
src[i]->id = i;
|
||||
@ -1684,15 +1684,15 @@ static bool test14(void)
|
||||
return(false);
|
||||
}
|
||||
|
||||
if ((NULL == src[j]->name && NULL != dst[j]->name) ||
|
||||
(NULL != src[j]->name && NULL == dst[j]->name)) {
|
||||
if ((NULL == src[j]->target && NULL != dst[j]->target) ||
|
||||
(NULL != src[j]->target && NULL == dst[j]->target)) {
|
||||
test_comment ("orte_dps.pack failed");
|
||||
fprintf(test_out, "test14 (ORTE_GPR_NOTIFY_DATA) failed with mismatched names");
|
||||
return(false);
|
||||
}
|
||||
|
||||
if (NULL != src[j]->name && NULL != dst[j]->name &&
|
||||
0 != strcmp(src[j]->name, dst[j]->name)) {
|
||||
if (NULL != src[j]->target && NULL != dst[j]->target &&
|
||||
0 != strcmp(src[j]->target, dst[j]->target)) {
|
||||
test_comment ("orte_dps.pack failed");
|
||||
fprintf(test_out, "test14 (ORTE_GPR_NOTIFY_DATA) failed with mismatched names");
|
||||
return(false);
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user