1
1

Continue expanding the range of unit tests. Fix a few memory leaks - orterun continues to leak like a sieve, but progress is being made.

This commit was SVN r5135.
Этот коммит содержится в:
Ralph Castain 2005-04-01 18:02:01 +00:00
родитель d737000a5e
Коммит 96508b3cb3
10 изменённых файлов: 250 добавлений и 99 удалений

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

@ -606,7 +606,7 @@ int orte_gpr_replica_module_init(void)
*/
int orte_gpr_replica_finalize(void)
{
int i;
int i, j;
orte_gpr_replica_segment_t** seg;
orte_gpr_replica_triggers_t** trig;
orte_gpr_replica_callbacks_t* cb;
@ -618,7 +618,9 @@ int orte_gpr_replica_finalize(void)
seg = (orte_gpr_replica_segment_t**)(orte_gpr_replica.segments)->addr;
for (i=0; i < (orte_gpr_replica.segments)->size; i++) {
if (NULL != seg[i]) {
j = i;
OBJ_RELEASE(seg[i]);
orte_pointer_array_set_item(orte_gpr_replica.segments, j, NULL);
}
}
OBJ_RELEASE(orte_gpr_replica.segments);
@ -626,7 +628,9 @@ int orte_gpr_replica_finalize(void)
trig = (orte_gpr_replica_triggers_t**)(orte_gpr_replica.triggers)->addr;
for (i=0; i < (orte_gpr_replica.triggers)->size; i++) {
if (NULL != trig[i]) {
j = i;
OBJ_RELEASE(trig[i]);
orte_pointer_array_set_item(orte_gpr_replica.triggers, j, NULL);
}
}
OBJ_RELEASE(orte_gpr_replica.triggers);

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

@ -27,6 +27,7 @@
#include "mca/gpr/base/base.h"
#include "mca/iof/base/base.h"
#include "mca/rmgr/base/base.h"
#include "util/if.h"
#include "util/malloc.h"
#include "util/output.h"
#include "util/session_dir.h"
@ -66,6 +67,9 @@ int orte_finalize(void)
orte_proc_info_finalize();
orte_univ_info_finalize();
/* cleanup the if data */
ompi_iffinalize();
/* finalize the mca */
mca_base_close();

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

@ -255,6 +255,7 @@ static int ompi_ifinit(void)
memcpy(intf_ptr, &intf, sizeof(intf));
ompi_list_append(&ompi_if_list, (ompi_list_item_t*)intf_ptr);
}
free(ifconf.ifc_req);
close(sd);
#else /* WIN32 implementation begins */
@ -361,6 +362,23 @@ static int ompi_ifinit(void)
}
/*
* Finalize the list of configured interfaces to free malloc'd memory
*/
int ompi_iffinalize(void)
{
#ifndef WIN32
ompi_if_t *intf_ptr;
while (NULL != (intf_ptr = (ompi_if_t*)ompi_list_remove_first(&ompi_if_list))) {
OBJ_RELEASE(intf_ptr);
}
#endif
return OMPI_SUCCESS;
}
/*
* Look for interface by name and returns its address
* as a dotted decimal formatted string.

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

@ -111,6 +111,15 @@ OMPI_DECLSPEC int ompi_ifindextomask(int if_index, struct sockaddr*, int);
*/
OMPI_DECLSPEC bool ompi_ifislocal(char *hostname);
/**
* Finalize the functions to release malloc'd data
*
* @param none
* @return OMPI_SUCCESS if no problems encountered
* @return OMPI_ERROR if data could not be released
*/
OMPI_DECLSPEC int ompi_iffinalize(void);
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif

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

@ -25,6 +25,7 @@ check_PROGRAMS = \
gpr_mem_leaks \
gpr_overwrite \
gpr_put_get \
gpr_threads \
gpr_triggers
TESTS = \
@ -62,6 +63,13 @@ gpr_put_get_LDADD = \
$(top_builddir)/test/support/libsupport.a
gpr_put_get_DEPENDENCIES = $(gpr_put_get_LDADD)
gpr_threads_SOURCES = gpr_threads.c
gpr_threads_LDADD = \
$(top_builddir)/src/libmpi.la \
$(replica) \
$(top_builddir)/test/support/libsupport.a
gpr_threads_DEPENDENCIES = $(gpr_threads_LDADD)
gpr_triggers_SOURCES = gpr_triggers.c
gpr_triggers_LDADD = \
$(top_builddir)/src/libmpi.la \

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

@ -254,6 +254,7 @@ int main(int argc, char **argv)
mca_base_close();
ompi_malloc_finalize();
ompi_output_finalize();
ompi_class_finalize();
fclose( test_out );

119
test/mca/gpr/gpr_threads.c Обычный файл
Просмотреть файл

@ -0,0 +1,119 @@
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "orte_config.h"
#include "include/orte_constants.h"
#include "include/orte_types.h"
#include "include/orte_schema.h"
#include <stdio.h>
#include <string.h>
#include "support.h"
#include "threads/thread.h"
#include "util/proc_info.h"
#include "util/sys_info.h"
#include "mca/errmgr/errmgr.h"
#include "mca/ns/ns_types.h"
#include "mca/gpr/gpr.h"
#include "dps/dps.h"
#include "mca/gpr/base/base.h"
#include "mca/gpr/replica/api_layer/gpr_replica_api.h"
#include "mca/gpr/replica/functional_layer/gpr_replica_fn.h"
#include "mca/gpr/replica/communications/gpr_replica_comm.h"
#include "mca/gpr/replica/transition_layer/gpr_replica_tl.h"
/* output files needed by the test */
static FILE *test_out=NULL;
/* function for exercising the registry */
void thread_fn(ompi_object_t *object);
int main(int argc, char **argv)
{
int i, rc, num_threads;
ompi_thread_t **threads;
/* protect against sizeof mismatches */
if (sizeof(i) > sizeof (void*)) {
fprintf(stderr, "cannot run this test on this machine\n");
exit 77;
}
test_init("test_gpr_threads");
if (getenv("TEST_WRITE_TO_FILE") != NULL) {
test_out = fopen( "test_gpr_threads", "w+" );
} else {
test_out = stderr;
}
if( test_out == NULL ) {
test_failure("gpr_threads couldn't open test file failed");
test_finalize();
exit(1);
}
if (1 < argc) { /* number of threads to run provided on cmd line */
num_threads = strtol(argv[1], NULL, 0);
} else { /* default to 2 */
num_threads = 2;
}
/* setup the runtime environment */
if (ORTE_SUCCESS != (rc = orte_init())) {
ORTE_ERROR_LOG(rc);
return rc;
}
/* setup the threads */
threads = (ompi_thread_t**)malloc(num_threads * sizeof(ompi_thread_t*));
if (NULL == threads) {
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
return ORTE_ERR_OUT_OF_RESOURCE;
}
for (i=0; i < num_threads; i++) {
threads[i] = OBJ_NEW(ompi_thread_t);
if (NULL == threads[i]) {
ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);
return ORTE_ERR_OUT_OF_RESOURCE;
}
threads[i]->t_run = thread_fn;
threads[i]->t_arg = (void*)i;
}
/* run the threads */
for (i=0; i < num_threads; i++) {
if (OMPI_SUCCESS != (rc = ompi_thread_start(threads[i]))) {
ORTE_ERROR_LOG(rc);
exit rc;
}
}
/* finalize things */
orte_finalize();
fclose( test_out );
test_finalize();
return(0);
}
void thread_fn(ompi_object_t *obj)
{
}

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

@ -19,13 +19,13 @@ include $(top_srcdir)/config/Makefile.options
AM_CPPFLAGS = -I$(top_srcdir)/test/support -DOMPI_ENABLE_DEBUG_OVERRIDE=1
check_PROGRAMS = \
test_rds_resfile
test_rds
TESTS = \
$(check_PROGRAMS)
test_rds_resfile_SOURCES = test_rds_resfile.c
test_rds_resfile_LDADD = \
test_rds_SOURCES = test_rds.c
test_rds_LDADD = \
$(top_builddir)/test/support/libsupport.a \
$(top_builddir)/src/libmpi.la
test_rds_resfile_DEPENDENCIES = $(test_rds_resfile_LDADD)
test_rds_DEPENDENCIES = $(test_rds_LDADD)

82
test/mca/rds/test_rds.c Обычный файл
Просмотреть файл

@ -0,0 +1,82 @@
/*
* unit test for RDS resource file parser
--------------------------------------------------------------------------
Authors: Ralph H. Castain <rhc@lanl.gov>
--------------------------------------------------------------------------
*/
#include "orte_config.h"
#include <stdio.h>
#include <string.h>
#include "support.h"
#include "include/orte_constants.h"
#include "runtime/runtime.h"
#include "mca/rds/base/base.h"
/* output files needed by the test */
static FILE *test_out=NULL;
static char *cmd_str="diff ./test_ns_replica_out ./test_ns_replica_out_std";
int
main(int argc, char **argv)
{
int rc;
test_init("test_rds_fn");
if (getenv("TEST_WRITE_TO_FILE") != NULL) {
test_out = fopen( "test_rds_fn", "w+" );
} else {
test_out = stderr;
}
if( test_out == NULL ) {
test_failure("rds_fn couldn't open test file failed");
test_finalize();
exit(1);
}
/* startup the runtime */
if (OMPI_SUCCESS == orte_init()) {
fprintf(test_out, "orte_init completed\n");
} else {
fprintf(test_out, "orte_init failed\n");
exit (1);
}
/* run the query */
if (ORTE_SUCCESS != (rc = orte_rds_base_query())) {
fprintf(test_out, "RDS query failed with code %s\n",
ORTE_ERROR_NAME(rc));
test_failure("test_rds_fn rds_query failed");
test_finalize();
exit(1);
} else {
fprintf(test_out, "RDS query succeeded\n");
test_success();
}
/* finalize */
orte_finalize();
fclose( test_out );
/* result = system( cmd_str );
if( result == 0 ) {
test_success();
}
else {
test_failure( "test_rds failed");
}
*/
test_finalize();
exit (0);
}

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

@ -1,94 +0,0 @@
/*
* unit test for RDS resource file parser
--------------------------------------------------------------------------
Authors: Ralph H. Castain <rhc@lanl.gov>
--------------------------------------------------------------------------
*/
#include "orte_config.h"
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
printf("Test oob_test disabled. Does not compile.\n");
return 77;
}
#if 0
#include "support.h"
#include "include/orte_constants.h"
#include "include/constants.h"
#include "include/orte_names.h"
#include "../../../src/mca/rds/resfile/resfile.h"
/* output files needed by the test */
static FILE *test_out=NULL;
static char *cmd_str="diff ./test_ns_replica_out ./test_ns_replica_out_std";
int
main(int argc, char **argv)
{
test_init("test_ns_replica");
test_out = fopen( "test_ns_replica_out", "w+" );
if( test_out == NULL ) {
test_failure("test_ns_replica couldn't open test file failed");
test_finalize();
exit(1);
}
/* startup the MCA */
if (OMPI_SUCCESS == mca_base_open()) {
fprintf(test_out, "MCA started\n");
} else {
fprintf(test_out, "MCA could not start\n");
exit (1);
}
/* open the rds framework */
if (ORTE_SUCCESS == orte_rds_open()) {
fprintf(test_out, "RDS opened\n");
} else {
fprintf(test_out, "RDS could not open\n");
exit (1);
}
/* startup the rds */
if (ORTE_SUCCESS != orte_rds_base_select(&multi, &hidden)) {
fprintf(test_out, "RDS could not start\n");
test_failure("test_rds_resfile orte_rds_base_select failed");
test_finalize();
exit(1);
} else {
fprintf(test_out, "RDS started\n");
test_success();
}
/* setup the environment for the resfile component */
setenv("OMPI_MCA_RESOURCE_FILE", "../../../src/etc/lanl_resources.xml");
/* call the rds resfile component */
if (ORTE_SUCCESS != (rc = orte_rds_resfile_query())) {
fprintf(test_out, "RDS Resfile query failed with code %s\n",
ORTE_ERROR_NAME(rc));
test_failure("test_rds_resfile rds_resfile_query failed");
test_finalize();
exit(1);
} else {
fprintf(test_out, "RDS resfile_query succeeded\n");
test_success();
}
}
#endif