int MPIDI_PG_Create_from_string(const char * str, MPIDI_PG_t ** pg_pptr, int *flag) { int mpi_errno = MPI_SUCCESS; const char *p; int vct_sz; MPIDI_PG_t *existing_pg, *pg_ptr=0; MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING); MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING); /*printf( "PgCreateFromString: Creating pg from %s\n", str ); fflush(stdout); */ /* The pg_id is at the beginning of the string, so we can just pass it to the find routine */ /* printf( "Looking for pg with id %s\n", str );fflush(stdout); */ mpi_errno = MPIDI_PG_Find((void *)str, &existing_pg); if (mpi_errno) MPIR_ERR_POP(mpi_errno); if (existing_pg != NULL) { /* return the existing PG */ *pg_pptr = existing_pg; *flag = 0; /* Note that the memory for the pg_id is freed in the exit */ goto fn_exit; } *flag = 1; /* Get the size from the string */ p = str; while (*p) p++; p++; vct_sz = atoi(p); mpi_errno = MPIDI_PG_Create(vct_sz, (void *)str, pg_pptr); if (mpi_errno != MPI_SUCCESS) { MPIR_ERR_POP(mpi_errno); } pg_ptr = *pg_pptr; pg_ptr->id = MPL_strdup( str ); /* Set up the functions to use strings to manage connection information */ MPIDI_PG_InitConnString( pg_ptr ); (*pg_ptr->connInfoFromString)( str, pg_ptr ); fn_exit: MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDI_PG_CREATE_FROM_STRING); return mpi_errno; fn_fail: goto fn_exit; }
int MPID_nem_tcp_get_vc_from_conninfo (char *pg_id, int pg_rank, struct MPIDI_VC **vc) { int mpi_errno = MPI_SUCCESS; MPIDI_PG_t *pg; MPIDI_STATE_DECL(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO); MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO); MPIU_DBG_MSG_FMT(NEM_SOCK_DET, VERBOSE, (MPIU_DBG_FDEST, "pg_id=%s pg_rank=%d", pg_id, pg_rank)); mpi_errno = MPIDI_PG_Find (pg_id, &pg); if (mpi_errno) MPIU_ERR_POP (mpi_errno); MPIU_ERR_CHKINTERNAL(pg == NULL, mpi_errno, "invalid PG"); MPIU_ERR_CHKINTERNAL(pg_rank < 0 || pg_rank > MPIDI_PG_Get_size (pg), mpi_errno, "invalid pg_rank"); MPIDI_PG_Get_vc_set_active (pg, pg_rank, vc); fn_exit: MPIDI_FUNC_EXIT(MPID_STATE_MPID_NEM_TCP_GET_VC_FROM_CONNINFO); return mpi_errno; fn_fail: goto fn_exit; }