Inter-process communications are better handled via pipes and sockets than opening /dev/null. More generic and it does not depend on any particularities of the /dev/null file system implementation.
George. On Apr 13, 2014, at 19:26 , Ralph Castain <r...@open-mpi.org> wrote: > ??? How is that any different/better than what was done? > > > On Apr 13, 2014, at 4:23 PM, George Bosilca <bosi...@icl.utk.edu> wrote: > >> Isn’t a socket or a pipe the right way to address this issue? >> >> George. >> >> On Apr 12, 2014, at 11:01 , svn-commit-mai...@open-mpi.org wrote: >> >>> Author: rhc (Ralph Castain) >>> Date: 2014-04-12 11:01:24 EDT (Sat, 12 Apr 2014) >>> New Revision: 31376 >>> URL: https://svn.open-mpi.org/trac/ompi/changeset/31376 >>> >>> Log: >>> Ensure we properly terminate the listening thread prior to exiting, but do >>> so in a way that doesn't make us wait for select to timeout. >>> >>> Refs #4510 >>> >>> Text files modified: >>> trunk/orte/mca/oob/tcp/oob_tcp_component.c | 9 ++++++--- >>> >>> trunk/orte/mca/oob/tcp/oob_tcp_component.h | 2 ++ >>> >>> trunk/orte/mca/oob/tcp/oob_tcp_listener.c | 17 ++++++++++++----- >>> >>> 3 files changed, 20 insertions(+), 8 deletions(-) >>> >>> Modified: trunk/orte/mca/oob/tcp/oob_tcp_component.c >>> ============================================================================== >>> --- trunk/orte/mca/oob/tcp/oob_tcp_component.c Sat Apr 12 10:43:20 >>> 2014 (r31375) >>> +++ trunk/orte/mca/oob/tcp/oob_tcp_component.c 2014-04-12 11:01:24 EDT >>> (Sat, 12 Apr 2014) (r31376) >>> @@ -140,8 +140,8 @@ >>> if (ORTE_PROC_IS_HNP) { >>> OBJ_CONSTRUCT(&mca_oob_tcp_component.listen_thread, opal_thread_t); >>> mca_oob_tcp_component.listen_thread_active = false; >>> - mca_oob_tcp_component.listen_thread_tv.tv_sec = 0; >>> - mca_oob_tcp_component.listen_thread_tv.tv_usec = 300000; >>> + mca_oob_tcp_component.listen_thread_tv.tv_sec = 3600; >>> + mca_oob_tcp_component.listen_thread_tv.tv_usec = 0; >>> } >>> mca_oob_tcp_component.addr_count = 0; >>> OBJ_CONSTRUCT(&mca_oob_tcp_component.modules, opal_pointer_array_t); >>> @@ -659,7 +659,10 @@ >>> ORTE_NAME_PRINT(ORTE_PROC_MY_NAME)); >>> >>> if (ORTE_PROC_IS_HNP && mca_oob_tcp_component.listen_thread_active) { >>> - mca_oob_tcp_component.listen_thread_active = 0; >>> + mca_oob_tcp_component.listen_thread_active = false; >>> + /* tell the thread to exit */ >>> + write(mca_oob_tcp_component.stop_thread, &i, sizeof(int)); >>> + opal_thread_join(&mca_oob_tcp_component.listen_thread, NULL); >>> } >>> >>> while (NULL != (item = >>> opal_list_remove_first(&mca_oob_tcp_component.listeners))) { >>> >>> Modified: trunk/orte/mca/oob/tcp/oob_tcp_component.h >>> ============================================================================== >>> --- trunk/orte/mca/oob/tcp/oob_tcp_component.h Sat Apr 12 10:43:20 >>> 2014 (r31375) >>> +++ trunk/orte/mca/oob/tcp/oob_tcp_component.h 2014-04-12 11:01:24 EDT >>> (Sat, 12 Apr 2014) (r31376) >>> @@ -12,6 +12,7 @@ >>> * Copyright (c) 2006-2013 Los Alamos National Security, LLC. >>> * All rights reserved. >>> * Copyright (c) 2010-2011 Cisco Systems, Inc. All rights reserved. >>> + * Copyright (c) 2014 Intel, Inc. All rights reserved >>> * $COPYRIGHT$ >>> * >>> * Additional copyrights may follow >>> @@ -77,6 +78,7 @@ >>> opal_thread_t listen_thread; /**< handle to the listening >>> thread */ >>> bool listen_thread_active; >>> struct timeval listen_thread_tv; /**< Timeout when using listen >>> thread */ >>> + int stop_thread; /**< file descriptor used >>> to exit the listen thread */ >>> >>> /* peers available via this transport - the index is the process name, >>> * and the pointer returned is the pointer to the last module that >>> >>> Modified: trunk/orte/mca/oob/tcp/oob_tcp_listener.c >>> ============================================================================== >>> --- trunk/orte/mca/oob/tcp/oob_tcp_listener.c Sat Apr 12 10:43:20 >>> 2014 (r31375) >>> +++ trunk/orte/mca/oob/tcp/oob_tcp_listener.c 2014-04-12 11:01:24 EDT >>> (Sat, 12 Apr 2014) (r31376) >>> @@ -121,11 +121,11 @@ >>> } >>> #endif >>> >>> - /* if I am the HNP, create a separate event base for the >>> - * listening thread so we can harvest connection requests >>> - * as rapidly as possible >>> + /* if I am the HNP, start a listening thread so we can >>> + * harvest connection requests as rapidly as possible >>> */ >>> if (ORTE_PROC_IS_HNP) { >>> + mca_oob_tcp_component.stop_thread = open("/dev/null", O_RDWR); >>> mca_oob_tcp_component.listen_thread_active = true; >>> mca_oob_tcp_component.listen_thread.t_run = listen_thread; >>> mca_oob_tcp_component.listen_thread.t_arg = NULL; >>> @@ -641,15 +641,22 @@ >>> FD_SET(listener->sd, &readfds); >>> max = (listener->sd > max) ? listener->sd : max; >>> } >>> + /* add the stop_thread fd */ >>> + FD_SET(mca_oob_tcp_component.stop_thread, &readfds); >>> + max = (mca_oob_tcp_component.stop_thread > max) ? >>> mca_oob_tcp_component.stop_thread : max; >>> + >>> /* set timeout interval */ >>> timeout.tv_sec = mca_oob_tcp_component.listen_thread_tv.tv_sec; >>> timeout.tv_usec = mca_oob_tcp_component.listen_thread_tv.tv_usec; >>> >>> - /* Block in a select for a short (10ms) amount of time to >>> - * avoid hammering the cpu. If a connection >>> + /* Block in a select to avoid hammering the cpu. If a connection >>> * comes in, we'll get woken up right away. >>> */ >>> rc = select(max + 1, &readfds, NULL, NULL, &timeout); >>> + if (!mca_oob_tcp_component.listen_thread_active) { >>> + /* we've been asked to terminate */ >>> + return NULL; >>> + } >>> if (rc < 0) { >>> if (EAGAIN != opal_socket_errno && EINTR != opal_socket_errno) { >>> perror("select"); >>> _______________________________________________ >>> svn mailing list >>> s...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/svn >> >> _______________________________________________ >> devel mailing list >> de...@open-mpi.org >> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel >> Link to this post: >> http://www.open-mpi.org/community/lists/devel/2014/04/14500.php > > _______________________________________________ > devel mailing list > de...@open-mpi.org > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel > Link to this post: > http://www.open-mpi.org/community/lists/devel/2014/04/14501.php