1
1

Clean up a few memory leaks - more to go...

This commit was SVN r7134.
Этот коммит содержится в:
Ralph Castain 2005-09-01 17:38:04 +00:00
родитель f4de8776a6
Коммит 76e622a552
8 изменённых файлов: 393 добавлений и 358 удалений

Просмотреть файл

@ -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);