root/ompi/errhandler/errcode.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ompi_mpi_errcode_init
  2. ompi_mpi_errcode_finalize
  3. ompi_mpi_errcode_add
  4. ompi_mpi_errclass_add
  5. ompi_mpi_errnum_add_string
  6. ompi_mpi_errcode_construct
  7. ompi_mpi_errcode_destruct

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
   4  *                         University Research and Technology
   5  *                         Corporation.  All rights reserved.
   6  * Copyright (c) 2004-2017 The University of Tennessee and The University
   7  *                         of Tennessee Research Foundation.  All rights
   8  *                         reserved.
   9  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
  10  *                         University of Stuttgart.  All rights reserved.
  11  * Copyright (c) 2004-2005 The Regents of the University of California.
  12  *                         All rights reserved.
  13  * Copyright (c) 2006      University of Houston. All rights reserved.
  14  * Copyright (c) 2013-2018 Cisco Systems, Inc.  All rights reserved
  15  * Copyright (c) 2013      Los Alamos National Security, LLC.  All rights
  16  *                         reserved.
  17  * Copyright (c) 2015      Research Organization for Information Science
  18  *                         and Technology (RIST). All rights reserved.
  19  * $COPYRIGHT$
  20  *
  21  * Additional copyrights may follow
  22  *
  23  * $HEADER$
  24  */
  25 
  26 #include "ompi_config.h"
  27 
  28 #include <stdio.h>
  29 #include <string.h>
  30 
  31 #include "mpi.h"
  32 
  33 #include "opal/util/string_copy.h"
  34 
  35 #include "ompi/errhandler/errcode.h"
  36 #include "ompi/constants.h"
  37 
  38 /* Table holding all error codes */
  39 opal_pointer_array_t ompi_mpi_errcodes = {{0}};
  40 int ompi_mpi_errcode_lastused=0;
  41 int ompi_mpi_errcode_lastpredefined=0;
  42 
  43 static ompi_mpi_errcode_t ompi_success;
  44 static ompi_mpi_errcode_t ompi_err_buffer;
  45 static ompi_mpi_errcode_t ompi_err_count;
  46 static ompi_mpi_errcode_t ompi_err_type;
  47 static ompi_mpi_errcode_t ompi_err_tag;
  48 static ompi_mpi_errcode_t ompi_err_comm;
  49 static ompi_mpi_errcode_t ompi_err_rank;
  50 static ompi_mpi_errcode_t ompi_err_request;
  51 static ompi_mpi_errcode_t ompi_err_root;
  52 static ompi_mpi_errcode_t ompi_err_group;
  53 static ompi_mpi_errcode_t ompi_err_op;
  54 static ompi_mpi_errcode_t ompi_err_topology;
  55 static ompi_mpi_errcode_t ompi_err_dims;
  56 static ompi_mpi_errcode_t ompi_err_arg;
  57 ompi_mpi_errcode_t ompi_err_unknown = {{0}};
  58 static ompi_mpi_errcode_t ompi_err_truncate;
  59 static ompi_mpi_errcode_t ompi_err_other;
  60 static ompi_mpi_errcode_t ompi_err_intern;
  61 static ompi_mpi_errcode_t ompi_err_in_status;
  62 static ompi_mpi_errcode_t ompi_err_pending;
  63 
  64 static ompi_mpi_errcode_t ompi_err_access;
  65 static ompi_mpi_errcode_t ompi_err_amode;
  66 static ompi_mpi_errcode_t ompi_err_assert;
  67 static ompi_mpi_errcode_t ompi_err_bad_file;
  68 static ompi_mpi_errcode_t ompi_err_base;
  69 static ompi_mpi_errcode_t ompi_err_conversion;
  70 static ompi_mpi_errcode_t ompi_err_disp;
  71 static ompi_mpi_errcode_t ompi_err_dup_datarep;
  72 static ompi_mpi_errcode_t ompi_err_file_exists;
  73 static ompi_mpi_errcode_t ompi_err_file_in_use;
  74 static ompi_mpi_errcode_t ompi_err_file;
  75 static ompi_mpi_errcode_t ompi_err_info_key;
  76 static ompi_mpi_errcode_t ompi_err_info_nokey;
  77 static ompi_mpi_errcode_t ompi_err_info_value;
  78 static ompi_mpi_errcode_t ompi_err_info;
  79 static ompi_mpi_errcode_t ompi_err_io;
  80 static ompi_mpi_errcode_t ompi_err_keyval;
  81 static ompi_mpi_errcode_t ompi_err_locktype;
  82 static ompi_mpi_errcode_t ompi_err_name;
  83 static ompi_mpi_errcode_t ompi_err_no_mem;
  84 static ompi_mpi_errcode_t ompi_err_not_same;
  85 static ompi_mpi_errcode_t ompi_err_no_space;
  86 static ompi_mpi_errcode_t ompi_err_no_such_file;
  87 static ompi_mpi_errcode_t ompi_err_port;
  88 static ompi_mpi_errcode_t ompi_err_quota;
  89 static ompi_mpi_errcode_t ompi_err_read_only;
  90 static ompi_mpi_errcode_t ompi_err_rma_conflict;
  91 static ompi_mpi_errcode_t ompi_err_rma_sync;
  92 static ompi_mpi_errcode_t ompi_err_service;
  93 static ompi_mpi_errcode_t ompi_err_size;
  94 static ompi_mpi_errcode_t ompi_err_spawn;
  95 static ompi_mpi_errcode_t ompi_err_unsupported_datarep;
  96 static ompi_mpi_errcode_t ompi_err_unsupported_operation;
  97 static ompi_mpi_errcode_t ompi_err_win;
  98 static ompi_mpi_errcode_t ompi_t_err_memory;
  99 static ompi_mpi_errcode_t ompi_t_err_not_initialized;
 100 static ompi_mpi_errcode_t ompi_t_err_cannot_init;
 101 static ompi_mpi_errcode_t ompi_t_err_invalid_index;
 102 static ompi_mpi_errcode_t ompi_t_err_invalid_item;
 103 static ompi_mpi_errcode_t ompi_t_err_invalid_handle;
 104 static ompi_mpi_errcode_t ompi_t_err_out_of_handles;
 105 static ompi_mpi_errcode_t ompi_t_err_out_of_sessions;
 106 static ompi_mpi_errcode_t ompi_t_err_invalid_session;
 107 static ompi_mpi_errcode_t ompi_t_err_cvar_set_not_now;
 108 static ompi_mpi_errcode_t ompi_t_err_cvar_set_never;
 109 static ompi_mpi_errcode_t ompi_t_err_pvar_no_startstop;
 110 static ompi_mpi_errcode_t ompi_t_err_pvar_no_write;
 111 static ompi_mpi_errcode_t ompi_t_err_pvar_no_atomic;
 112 static ompi_mpi_errcode_t ompi_err_rma_range;
 113 static ompi_mpi_errcode_t ompi_err_rma_attach;
 114 static ompi_mpi_errcode_t ompi_err_rma_flavor;
 115 static ompi_mpi_errcode_t ompi_err_rma_shared;
 116 static ompi_mpi_errcode_t ompi_t_err_invalid;
 117 static ompi_mpi_errcode_t ompi_t_err_invalid_name;
 118 
 119 static void ompi_mpi_errcode_construct(ompi_mpi_errcode_t* errcode);
 120 static void ompi_mpi_errcode_destruct(ompi_mpi_errcode_t* errcode);
 121 
 122 OBJ_CLASS_INSTANCE(ompi_mpi_errcode_t,opal_object_t,ompi_mpi_errcode_construct, ompi_mpi_errcode_destruct);
 123 
 124 #define CONSTRUCT_ERRCODE(VAR, ERRCODE, TXT )                             \
 125 do {                                                                      \
 126     OBJ_CONSTRUCT(&(VAR), ompi_mpi_errcode_t);                            \
 127     (VAR).code = (ERRCODE);                                               \
 128     (VAR).cls = (ERRCODE);                                                \
 129     opal_string_copy((VAR).errstring, (TXT), MPI_MAX_ERROR_STRING);       \
 130     opal_pointer_array_set_item(&ompi_mpi_errcodes, (ERRCODE), &(VAR));   \
 131 } while (0)
 132 
 133 int ompi_mpi_errcode_init (void)
 134 {
 135     /* Initialize the pointer array, which will hold the references to
 136        the error objects */
 137     OBJ_CONSTRUCT(&ompi_mpi_errcodes, opal_pointer_array_t);
 138     if( OPAL_SUCCESS != opal_pointer_array_init(&ompi_mpi_errcodes, 64,
 139                                                 OMPI_FORTRAN_HANDLE_MAX, 32) ) {
 140         return OMPI_ERROR;
 141     }
 142 
 143     /* Initialize now each predefined error code and register
 144        it in the pointer-array. */
 145     CONSTRUCT_ERRCODE( ompi_success, MPI_SUCCESS, "MPI_SUCCESS: no errors" );
 146     CONSTRUCT_ERRCODE( ompi_err_buffer, MPI_ERR_BUFFER, "MPI_ERR_BUFFER: invalid buffer pointer");
 147     CONSTRUCT_ERRCODE( ompi_err_count, MPI_ERR_COUNT, "MPI_ERR_COUNT: invalid count argument" );
 148     CONSTRUCT_ERRCODE( ompi_err_type, MPI_ERR_TYPE, "MPI_ERR_TYPE: invalid datatype" );
 149     CONSTRUCT_ERRCODE( ompi_err_tag, MPI_ERR_TAG, "MPI_ERR_TAG: invalid tag" );
 150     CONSTRUCT_ERRCODE( ompi_err_comm, MPI_ERR_COMM, "MPI_ERR_COMM: invalid communicator" );
 151     CONSTRUCT_ERRCODE( ompi_err_rank, MPI_ERR_RANK, "MPI_ERR_RANK: invalid rank" );
 152     CONSTRUCT_ERRCODE( ompi_err_request, MPI_ERR_REQUEST, "MPI_ERR_REQUEST: invalid request" );
 153     CONSTRUCT_ERRCODE( ompi_err_root, MPI_ERR_ROOT, "MPI_ERR_ROOT: invalid root" );
 154     CONSTRUCT_ERRCODE( ompi_err_group, MPI_ERR_GROUP, "MPI_ERR_GROUP: invalid group" );
 155     CONSTRUCT_ERRCODE( ompi_err_op, MPI_ERR_OP, "MPI_ERR_OP: invalid reduce operation" );
 156     CONSTRUCT_ERRCODE( ompi_err_topology, MPI_ERR_TOPOLOGY, "MPI_ERR_TOPOLOGY: invalid communicator topology" );
 157     CONSTRUCT_ERRCODE( ompi_err_dims, MPI_ERR_DIMS, "MPI_ERR_DIMS: invalid topology dimension" );
 158     CONSTRUCT_ERRCODE( ompi_err_arg, MPI_ERR_ARG, "MPI_ERR_ARG: invalid argument of some other kind" );
 159     CONSTRUCT_ERRCODE( ompi_err_unknown, MPI_ERR_UNKNOWN, "MPI_ERR_UNKNOWN: unknown error" );
 160     CONSTRUCT_ERRCODE( ompi_err_truncate, MPI_ERR_TRUNCATE, "MPI_ERR_TRUNCATE: message truncated" );
 161     CONSTRUCT_ERRCODE( ompi_err_other, MPI_ERR_OTHER, "MPI_ERR_OTHER: known error not in list" );
 162     CONSTRUCT_ERRCODE( ompi_err_intern, MPI_ERR_INTERN, "MPI_ERR_INTERN: internal error" );
 163     CONSTRUCT_ERRCODE( ompi_err_in_status, MPI_ERR_IN_STATUS, "MPI_ERR_IN_STATUS: error code in status" );
 164     CONSTRUCT_ERRCODE( ompi_err_pending, MPI_ERR_PENDING, "MPI_ERR_PENDING: pending request" );
 165     CONSTRUCT_ERRCODE( ompi_err_access, MPI_ERR_ACCESS, "MPI_ERR_ACCESS: invalid access mode" );
 166     CONSTRUCT_ERRCODE( ompi_err_amode, MPI_ERR_AMODE, "MPI_ERR_AMODE: invalid amode argument" );
 167     CONSTRUCT_ERRCODE( ompi_err_assert, MPI_ERR_ASSERT, "MPI_ERR_ASSERT: invalid assert argument" );
 168     CONSTRUCT_ERRCODE( ompi_err_bad_file, MPI_ERR_BAD_FILE, "MPI_ERR_BAD_FILE: bad file" );
 169     CONSTRUCT_ERRCODE( ompi_err_base, MPI_ERR_BASE, "MPI_ERR_BASE: invalid base" );
 170     CONSTRUCT_ERRCODE( ompi_err_conversion, MPI_ERR_CONVERSION, "MPI_ERR_CONVERSION: error in data conversion" );
 171     CONSTRUCT_ERRCODE( ompi_err_disp, MPI_ERR_DISP, "MPI_ERR_DISP: invalid displacement" );
 172     CONSTRUCT_ERRCODE( ompi_err_dup_datarep, MPI_ERR_DUP_DATAREP, "MPI_ERR_DUP_DATAREP: error duplicating data representation" );
 173     CONSTRUCT_ERRCODE( ompi_err_file_exists, MPI_ERR_FILE_EXISTS, "MPI_ERR_FILE_EXISTS: file exists alreay" );
 174     CONSTRUCT_ERRCODE( ompi_err_file_in_use, MPI_ERR_FILE_IN_USE, "MPI_ERR_FILE_IN_USE: file already in use" );
 175     CONSTRUCT_ERRCODE( ompi_err_file, MPI_ERR_FILE, "MPI_ERR_FILE: invalid file" );
 176     CONSTRUCT_ERRCODE( ompi_err_info_key, MPI_ERR_INFO_KEY, "MPI_ERR_INFO_KEY: invalid key argument for info object" );
 177     CONSTRUCT_ERRCODE( ompi_err_info_nokey, MPI_ERR_INFO_NOKEY, "MPI_ERR_INFO_NOKEY: unknown key for given info object" );
 178     CONSTRUCT_ERRCODE( ompi_err_info_value, MPI_ERR_INFO_VALUE, "MPI_ERR_INFO_VALUE: invalid value argument for info object" );
 179     CONSTRUCT_ERRCODE( ompi_err_info, MPI_ERR_INFO, "MPI_ERR_INFO: invalid info object" );
 180     CONSTRUCT_ERRCODE( ompi_err_io, MPI_ERR_IO, "MPI_ERR_IO: input/output error" );
 181     CONSTRUCT_ERRCODE( ompi_err_keyval, MPI_ERR_KEYVAL, "MPI_ERR_KEYVAL: invalid key value" );
 182     CONSTRUCT_ERRCODE( ompi_err_locktype, MPI_ERR_LOCKTYPE, "MPI_ERR_LOCKTYPE: invalid lock" );
 183     CONSTRUCT_ERRCODE( ompi_err_name, MPI_ERR_NAME, "MPI_ERR_NAME: invalid name argument" );
 184     CONSTRUCT_ERRCODE( ompi_err_no_mem, MPI_ERR_NO_MEM, "MPI_ERR_NO_MEM: out of memory" );
 185     CONSTRUCT_ERRCODE( ompi_err_not_same, MPI_ERR_NOT_SAME, "MPI_ERR_NOT_SAME: objects are not identical");
 186     CONSTRUCT_ERRCODE( ompi_err_no_space, MPI_ERR_NO_SPACE, "MPI_ERR_NO_SPACE: no space left on device" );
 187     CONSTRUCT_ERRCODE( ompi_err_no_such_file, MPI_ERR_NO_SUCH_FILE, "MPI_ERR_NO_SUCH_FILE: no such file or directory" );
 188     CONSTRUCT_ERRCODE( ompi_err_port, MPI_ERR_PORT, "MPI_ERR_PORT: invalid port" );
 189     CONSTRUCT_ERRCODE( ompi_err_quota, MPI_ERR_QUOTA, "MPI_ERR_QUOTA: out of quota" );
 190     CONSTRUCT_ERRCODE( ompi_err_read_only, MPI_ERR_READ_ONLY, "MPI_ERR_READ_ONLY: file is read only" );
 191     CONSTRUCT_ERRCODE( ompi_err_rma_conflict, MPI_ERR_RMA_CONFLICT, "MPI_ERR_RMA_CONFLICT: rma conflict during operation" );
 192     CONSTRUCT_ERRCODE( ompi_err_rma_sync, MPI_ERR_RMA_SYNC, "MPI_ERR_RMA_SYNC: error executing rma sync" );
 193     CONSTRUCT_ERRCODE( ompi_err_service, MPI_ERR_SERVICE, "MPI_ERR_SERVICE: unknown service name" );
 194     CONSTRUCT_ERRCODE( ompi_err_size, MPI_ERR_SIZE, "MPI_ERR_SIZE: invalid size" );
 195     CONSTRUCT_ERRCODE( ompi_err_spawn, MPI_ERR_SPAWN, "MPI_ERR_SPAWN: could not spawn processes" );
 196     CONSTRUCT_ERRCODE( ompi_err_unsupported_datarep, MPI_ERR_UNSUPPORTED_DATAREP, "MPI_ERR_UNSUPPORTED_DATAREP: data representation not supported" );
 197     CONSTRUCT_ERRCODE( ompi_err_unsupported_operation, MPI_ERR_UNSUPPORTED_OPERATION, "MPI_ERR_UNSUPPORTED_OPERATION: operation not supported" );
 198     CONSTRUCT_ERRCODE( ompi_err_win, MPI_ERR_WIN, "MPI_ERR_WIN: invalid window" );
 199     CONSTRUCT_ERRCODE( ompi_t_err_memory, MPI_T_ERR_MEMORY, "MPI_T_ERR_MEMORY: out of memory" );
 200     CONSTRUCT_ERRCODE( ompi_t_err_not_initialized, MPI_T_ERR_NOT_INITIALIZED, "MPI_T_ERR_NOT_INITIALIZED: interface not initialized" );
 201     CONSTRUCT_ERRCODE( ompi_t_err_cannot_init, MPI_T_ERR_CANNOT_INIT, "MPI_T_ERR_CANNOT_INIT: interface not in the state to be initialized" );
 202     CONSTRUCT_ERRCODE( ompi_t_err_invalid_index, MPI_T_ERR_INVALID_INDEX, "MPI_T_ERR_INVALID_INDEX: invalid index" );
 203     CONSTRUCT_ERRCODE( ompi_t_err_invalid_item, MPI_T_ERR_INVALID_ITEM, "MPI_T_ERR_INVALID_ITEM: the item index queried is out of range" );
 204     CONSTRUCT_ERRCODE( ompi_t_err_invalid_handle, MPI_T_ERR_INVALID_HANDLE, "MPI_T_ERR_INVALID_HANDLE: the handle is invalid" );
 205     CONSTRUCT_ERRCODE( ompi_t_err_out_of_handles, MPI_T_ERR_OUT_OF_HANDLES, "MPI_T_ERR_OUT_OF_HANDLES: no more handles available" );
 206     CONSTRUCT_ERRCODE( ompi_t_err_out_of_sessions, MPI_T_ERR_OUT_OF_SESSIONS, "MPI_T_ERR_OUT_OF_SESSIONS: no more sessions available" );
 207     CONSTRUCT_ERRCODE( ompi_t_err_invalid_session, MPI_T_ERR_INVALID_SESSION, "MPI_T_ERR_INVALID_SESSION: session argument is not a valid session" );
 208     CONSTRUCT_ERRCODE( ompi_t_err_cvar_set_not_now, MPI_T_ERR_CVAR_SET_NOT_NOW, "MPI_T_ERR_CVAR_SET_NOT_NOW: variable cannot be set at this moment" );
 209     CONSTRUCT_ERRCODE( ompi_t_err_cvar_set_never, MPI_T_ERR_CVAR_SET_NEVER, "MPI_T_ERR_CVAR_SET_NEVER: variable cannot be set until end of execution" );
 210     CONSTRUCT_ERRCODE( ompi_t_err_pvar_no_startstop, MPI_T_ERR_PVAR_NO_STARTSTOP, "MPI_T_ERR_PVAR_NO_STARTSTOP: variable cannot be started or stopped" );
 211     CONSTRUCT_ERRCODE( ompi_t_err_pvar_no_write, MPI_T_ERR_PVAR_NO_WRITE, "MPI_T_ERR_PVAR_NO_WRITE: variable cannot be written or reset" );
 212     CONSTRUCT_ERRCODE( ompi_t_err_pvar_no_atomic, MPI_T_ERR_PVAR_NO_ATOMIC, "MPI_T_ERR_PVAR_NO_ATOMIC: variable cannot be read and written atomically" );
 213     CONSTRUCT_ERRCODE( ompi_err_rma_range, MPI_ERR_RMA_RANGE, "MPI_ERR_RMA_RANGE: invalid RMA address range" );
 214     CONSTRUCT_ERRCODE( ompi_err_rma_attach, MPI_ERR_RMA_ATTACH, "MPI_ERR_RMA_ATTACH: Could not attach RMA segment" );
 215     CONSTRUCT_ERRCODE( ompi_err_rma_flavor, MPI_ERR_RMA_FLAVOR, "MPI_ERR_RMA_FLAVOR: Invalid type of window" );
 216     CONSTRUCT_ERRCODE( ompi_err_rma_shared, MPI_ERR_RMA_SHARED, "MPI_ERR_RMA_SHARED: Memory cannot be shared" );
 217     CONSTRUCT_ERRCODE( ompi_t_err_invalid, MPI_T_ERR_INVALID, "MPI_T_ERR_INVALID: Invalid use of the interface or bad parameter value(s)" );
 218     CONSTRUCT_ERRCODE( ompi_t_err_invalid_name, MPI_T_ERR_INVALID_NAME, "MPI_T_ERR_INVALID_NAME: The variable or category name is invalid" );
 219 
 220     /* Per MPI-3 p353:27-32, MPI_LASTUSEDCODE must be >=
 221        MPI_ERR_LASTCODE.  So just start it as == MPI_ERR_LASTCODE. */
 222     ompi_mpi_errcode_lastused = MPI_ERR_LASTCODE;
 223     ompi_mpi_errcode_lastpredefined = MPI_ERR_LASTCODE;
 224     return OMPI_SUCCESS;
 225 }
 226 
 227 int ompi_mpi_errcode_finalize(void)
 228 {
 229     int i;
 230     ompi_mpi_errcode_t *errc;
 231 
 232     for (i=ompi_mpi_errcode_lastpredefined+1; i<=ompi_mpi_errcode_lastused; i++) {
 233         /*
 234          * there are some user defined error-codes, which
 235          * we have to free.
 236          */
 237         errc = (ompi_mpi_errcode_t *)opal_pointer_array_get_item(&ompi_mpi_errcodes, i);
 238         OBJ_RELEASE (errc);
 239     }
 240 
 241     OBJ_DESTRUCT(&ompi_success);
 242     OBJ_DESTRUCT(&ompi_err_buffer);
 243     OBJ_DESTRUCT(&ompi_err_count);
 244     OBJ_DESTRUCT(&ompi_err_type);
 245     OBJ_DESTRUCT(&ompi_err_tag);
 246     OBJ_DESTRUCT(&ompi_err_comm);
 247     OBJ_DESTRUCT(&ompi_err_rank);
 248     OBJ_DESTRUCT(&ompi_err_request);
 249     OBJ_DESTRUCT(&ompi_err_root);
 250     OBJ_DESTRUCT(&ompi_err_group);
 251     OBJ_DESTRUCT(&ompi_err_op);
 252     OBJ_DESTRUCT(&ompi_err_topology);
 253     OBJ_DESTRUCT(&ompi_err_dims);
 254     OBJ_DESTRUCT(&ompi_err_arg);
 255     OBJ_DESTRUCT(&ompi_err_unknown);
 256     OBJ_DESTRUCT(&ompi_err_truncate);
 257     OBJ_DESTRUCT(&ompi_err_other);
 258     OBJ_DESTRUCT(&ompi_err_intern);
 259     OBJ_DESTRUCT(&ompi_err_in_status);
 260     OBJ_DESTRUCT(&ompi_err_pending);
 261     OBJ_DESTRUCT(&ompi_err_access);
 262     OBJ_DESTRUCT(&ompi_err_amode);
 263     OBJ_DESTRUCT(&ompi_err_assert);
 264     OBJ_DESTRUCT(&ompi_err_bad_file);
 265     OBJ_DESTRUCT(&ompi_err_base);
 266     OBJ_DESTRUCT(&ompi_err_conversion);
 267     OBJ_DESTRUCT(&ompi_err_disp);
 268     OBJ_DESTRUCT(&ompi_err_dup_datarep);
 269     OBJ_DESTRUCT(&ompi_err_file_exists);
 270     OBJ_DESTRUCT(&ompi_err_file_in_use);
 271     OBJ_DESTRUCT(&ompi_err_file);
 272     OBJ_DESTRUCT(&ompi_err_info_key);
 273     OBJ_DESTRUCT(&ompi_err_info_nokey);
 274     OBJ_DESTRUCT(&ompi_err_info_value);
 275     OBJ_DESTRUCT(&ompi_err_info);
 276     OBJ_DESTRUCT(&ompi_err_io);
 277     OBJ_DESTRUCT(&ompi_err_keyval);
 278     OBJ_DESTRUCT(&ompi_err_locktype);
 279     OBJ_DESTRUCT(&ompi_err_name);
 280     OBJ_DESTRUCT(&ompi_err_no_mem);
 281     OBJ_DESTRUCT(&ompi_err_not_same);
 282     OBJ_DESTRUCT(&ompi_err_no_space);
 283     OBJ_DESTRUCT(&ompi_err_no_such_file);
 284     OBJ_DESTRUCT(&ompi_err_port);
 285     OBJ_DESTRUCT(&ompi_err_quota);
 286     OBJ_DESTRUCT(&ompi_err_read_only);
 287     OBJ_DESTRUCT(&ompi_err_rma_conflict);
 288     OBJ_DESTRUCT(&ompi_err_rma_sync);
 289     OBJ_DESTRUCT(&ompi_err_service);
 290     OBJ_DESTRUCT(&ompi_err_size);
 291     OBJ_DESTRUCT(&ompi_err_spawn);
 292     OBJ_DESTRUCT(&ompi_err_unsupported_datarep);
 293     OBJ_DESTRUCT(&ompi_err_unsupported_operation);
 294     OBJ_DESTRUCT(&ompi_err_win);
 295     OBJ_DESTRUCT(&ompi_t_err_memory);
 296     OBJ_DESTRUCT(&ompi_t_err_not_initialized);
 297     OBJ_DESTRUCT(&ompi_t_err_cannot_init);
 298     OBJ_DESTRUCT(&ompi_t_err_invalid_index);
 299     OBJ_DESTRUCT(&ompi_t_err_invalid_item);
 300     OBJ_DESTRUCT(&ompi_t_err_invalid_handle);
 301     OBJ_DESTRUCT(&ompi_t_err_out_of_handles);
 302     OBJ_DESTRUCT(&ompi_t_err_out_of_sessions);
 303     OBJ_DESTRUCT(&ompi_t_err_invalid_session);
 304     OBJ_DESTRUCT(&ompi_t_err_cvar_set_not_now);
 305     OBJ_DESTRUCT(&ompi_t_err_cvar_set_never);
 306     OBJ_DESTRUCT(&ompi_t_err_pvar_no_startstop);
 307     OBJ_DESTRUCT(&ompi_t_err_pvar_no_write);
 308     OBJ_DESTRUCT(&ompi_t_err_pvar_no_atomic);
 309     OBJ_DESTRUCT(&ompi_err_rma_range);
 310     OBJ_DESTRUCT(&ompi_err_rma_attach);
 311     OBJ_DESTRUCT(&ompi_err_rma_flavor);
 312     OBJ_DESTRUCT(&ompi_err_rma_shared);
 313     OBJ_DESTRUCT(&ompi_t_err_invalid);
 314     OBJ_DESTRUCT(&ompi_t_err_invalid_name);
 315 
 316     OBJ_DESTRUCT(&ompi_mpi_errcodes);
 317     return OMPI_SUCCESS;
 318 }
 319 
 320 int ompi_mpi_errcode_add(int errclass )
 321 {
 322     ompi_mpi_errcode_t *newerrcode;
 323 
 324     newerrcode = OBJ_NEW(ompi_mpi_errcode_t);
 325     newerrcode->code = (ompi_mpi_errcode_lastused+1);
 326     newerrcode->cls = errclass;
 327     opal_pointer_array_set_item(&ompi_mpi_errcodes, newerrcode->code, newerrcode);
 328 
 329     ompi_mpi_errcode_lastused++;
 330     return newerrcode->code;
 331 }
 332 
 333 int ompi_mpi_errclass_add(void)
 334 {
 335     ompi_mpi_errcode_t *newerrcode;
 336 
 337     newerrcode = OBJ_NEW(ompi_mpi_errcode_t);
 338     newerrcode->cls = ( ompi_mpi_errcode_lastused+1);
 339     opal_pointer_array_set_item(&ompi_mpi_errcodes, newerrcode->cls, newerrcode);
 340 
 341     ompi_mpi_errcode_lastused++;
 342     return newerrcode->cls;
 343 }
 344 
 345 int ompi_mpi_errnum_add_string(int errnum, const char *errstring, int len)
 346 {
 347     ompi_mpi_errcode_t *errcodep;
 348 
 349     errcodep = (ompi_mpi_errcode_t *)opal_pointer_array_get_item(&ompi_mpi_errcodes, errnum);
 350     if ( NULL == errcodep ) {
 351         return OMPI_ERROR;
 352     }
 353 
 354     if ( MPI_MAX_ERROR_STRING > len ) {
 355         len = MPI_MAX_ERROR_STRING;
 356     }
 357 
 358     opal_string_copy( errcodep->errstring, errstring, len );
 359     return OMPI_SUCCESS;
 360 }
 361 
 362 static void ompi_mpi_errcode_construct(ompi_mpi_errcode_t *errcode)
 363 {
 364     errcode->code = MPI_UNDEFINED;
 365     errcode->cls = MPI_UNDEFINED;
 366     memset ( errcode->errstring, 0, MPI_MAX_ERROR_STRING);
 367     return;
 368 }
 369 
 370 static void ompi_mpi_errcode_destruct(ompi_mpi_errcode_t *errcode)
 371 {
 372     if (MPI_UNDEFINED != errcode->code) {
 373         opal_pointer_array_set_item(&ompi_mpi_errcodes, errcode->code, NULL);
 374     } else if (MPI_UNDEFINED != errcode->cls) {
 375         opal_pointer_array_set_item(&ompi_mpi_errcodes, errcode->cls, NULL);
 376     }
 377 }

/* [<][>][^][v][top][bottom][index][help] */