00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "romioconf.h"
00022 #include "mpi.h"
00023 #include <stdlib.h>
00024 #include <stdio.h>
00025
00026
00027 #define FPRINTF fprintf
00028 void *ADIOI_Malloc_fn(size_t size, int lineno, char *fname);
00029 void *ADIOI_Calloc_fn(size_t nelem, size_t elsize, int lineno, char *fname);
00030 void *ADIOI_Realloc_fn(void *ptr, size_t size, int lineno, char *fname);
00031 void ADIOI_Free_fn(void *ptr, int lineno, char *fname);
00032
00033 void *ADIOI_Malloc_fn(size_t size, int lineno, char *fname)
00034 {
00035 void *new;
00036
00037 #ifdef XFS
00038 new = (void *) memalign(XFS_MEMALIGN, size);
00039 #else
00040 new = (void *) malloc(size);
00041 #endif
00042 if (!new) {
00043 FPRINTF(stderr, "Out of memory in file %s, line %d\n", fname, lineno);
00044 MPI_Abort(MPI_COMM_WORLD, 1);
00045 }
00046
00047 return new;
00048 }
00049
00050
00051 void *ADIOI_Calloc_fn(size_t nelem, size_t elsize, int lineno, char *fname)
00052 {
00053 void *new;
00054
00055 new = (void *) calloc(nelem, elsize);
00056 if (!new) {
00057 FPRINTF(stderr, "Out of memory in file %s, line %d\n", fname, lineno);
00058 MPI_Abort(MPI_COMM_WORLD, 1);
00059 }
00060
00061 return new;
00062 }
00063
00064
00065 void *ADIOI_Realloc_fn(void *ptr, size_t size, int lineno, char *fname)
00066 {
00067 void *new;
00068
00069 new = (void *) realloc(ptr, size);
00070 if (!new) {
00071 FPRINTF(stderr, "realloc failed in file %s, line %d\n", fname, lineno);
00072 MPI_Abort(MPI_COMM_WORLD, 1);
00073 }
00074 return new;
00075 }
00076
00077
00078 void ADIOI_Free_fn(void *ptr, int lineno, char *fname)
00079 {
00080 if (!ptr) {
00081 FPRINTF(stderr, "Attempt to free null pointer in file %s, line %d\n", fname, lineno);
00082 MPI_Abort(MPI_COMM_WORLD, 1);
00083 }
00084
00085 free(ptr);
00086 }
00087