@@ -664,7 +664,8 @@ pmix_status_t PMIx_IOF_push(const pmix_proc_t targets[], size_t ntargets, pmix_b
664
664
665
665
/* if we are not a server, then we send the provided
666
666
* data to our server for processing */
667
- if (!PMIX_PEER_IS_SERVER (pmix_globals .mypeer ) || PMIX_PEER_IS_LAUNCHER (pmix_globals .mypeer )) {
667
+ if (!PMIX_PEER_IS_SERVER (pmix_globals .mypeer ) ||
668
+ PMIX_PEER_IS_LAUNCHER (pmix_globals .mypeer )) {
668
669
msg = PMIX_NEW (pmix_buffer_t );
669
670
if (NULL == msg ) {
670
671
return PMIX_ERR_NOMEM ;
@@ -1803,21 +1804,31 @@ void pmix_iof_read_local_handler(int sd, short args, void *cbdata)
1803
1804
goto reactivate ;
1804
1805
}
1805
1806
1807
+ /* if I am a launcher and connected to a server, then
1808
+ * we want to send things to our server for relay */
1809
+ if (PMIX_PEER_IS_LAUNCHER (pmix_globals .mypeer ) &&
1810
+ pmix_globals .connected ) {
1811
+ goto forward ;
1812
+ }
1813
+
1806
1814
/* if I am a server, then push this up to my host */
1807
- if (PMIX_PROC_IS_SERVER ( & pmix_globals .mypeer -> proc_type )) {
1815
+ if (PMIX_PEER_IS_SERVER ( pmix_globals .mypeer )) {
1808
1816
if (NULL == pmix_host_server .push_stdin ) {
1809
1817
/* nothing we can do with this info - no point in reactivating it */
1810
1818
return ;
1811
1819
}
1812
1820
PMIX_BYTE_OBJECT_CREATE (boptr , 1 );
1813
- boptr -> bytes = (char * )malloc (bo .size );
1814
- memcpy (boptr -> bytes , bo .bytes , bo .size );
1815
- boptr -> size = bo .size ;
1821
+ if (0 < bo .size ) {
1822
+ boptr -> bytes = (char * )malloc (bo .size );
1823
+ memcpy (boptr -> bytes , bo .bytes , bo .size );
1824
+ boptr -> size = bo .size ;
1825
+ }
1816
1826
rc = pmix_host_server .push_stdin (& pmix_globals .myid , rev -> targets , rev -> ntargets ,
1817
1827
rev -> directives , rev -> ndirs , boptr , opcbfn , (void * )boptr );
1818
1828
goto reactivate ;
1819
1829
}
1820
1830
1831
+ forward :
1821
1832
/* pass the data to our PMIx server so it can relay it
1822
1833
* to the host RM for distribution */
1823
1834
msg = PMIX_NEW (pmix_buffer_t );
@@ -1911,11 +1922,13 @@ PMIX_CLASS_INSTANCE(pmix_iof_sink_t, pmix_list_item_t, iof_sink_construct, iof_s
1911
1922
1912
1923
static void iof_read_event_construct (pmix_iof_read_event_t * rev )
1913
1924
{
1925
+ rev -> tv .tv_sec = 0 ;
1926
+ rev -> tv .tv_usec = 0 ;
1914
1927
rev -> fd = -1 ;
1928
+ rev -> channel = PMIX_FWD_NO_CHANNELS ;
1915
1929
rev -> active = false;
1916
1930
rev -> childproc = NULL ;
1917
- rev -> tv .tv_sec = 0 ;
1918
- rev -> tv .tv_usec = 0 ;
1931
+ rev -> always_readable = false;
1919
1932
rev -> targets = NULL ;
1920
1933
rev -> ntargets = 0 ;
1921
1934
rev -> directives = NULL ;
0 commit comments