DAPL doesn't actually wait for the async processing thread to exit before allowing the library to close. It will wait up to 10 seconds, which under heavy load isn't enough time. Since the thread is created by an application level thread, it will continue to run as long as the application runs. But if the application closes the library, then all library data and code is invalid, which can result in the thread running something that's not library code and accessing freed memory.
Signed-off-by: Sean Hefty <sean.he...@intel.com> --- dapl/openib_cma/device.c | 8 +------- dapl/openib_scm/device.c | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/dapl/openib_cma/device.c b/dapl/openib_cma/device.c index 743e8fa..c1c1ee2 100644 --- a/dapl/openib_cma/device.c +++ b/dapl/openib_cma/device.c @@ -562,8 +562,6 @@ DAT_RETURN dapli_ib_thread_init(void) void dapli_ib_thread_destroy(void) { - int retries = 10; - dapl_dbg_log(DAPL_DBG_TYPE_UTIL, " ib_thread_destroy(%d)\n", dapl_os_getpid()); /* @@ -578,11 +576,7 @@ void dapli_ib_thread_destroy(void) goto bail; g_ib_thread_state = IB_THREAD_CANCEL; - if (dapls_thread_signal() == -1) - dapl_log(DAPL_DBG_TYPE_UTIL, - " destroy: thread wakeup error = %s\n", - strerror(errno)); - while ((g_ib_thread_state != IB_THREAD_EXIT) && (retries--)) { + while ((g_ib_thread_state != IB_THREAD_EXIT)) { dapl_dbg_log(DAPL_DBG_TYPE_UTIL, " ib_thread_destroy: waiting for ib_thread\n"); if (dapls_thread_signal() == -1) diff --git a/dapl/openib_scm/device.c b/dapl/openib_scm/device.c index 9c91b78..bb72279 100644 --- a/dapl/openib_scm/device.c +++ b/dapl/openib_scm/device.c @@ -545,8 +545,6 @@ DAT_RETURN dapli_ib_thread_init(void) void dapli_ib_thread_destroy(void) { - int retries = 10; - dapl_dbg_log(DAPL_DBG_TYPE_UTIL, " ib_thread_destroy(%d)\n", dapl_os_getpid()); /* @@ -561,11 +559,7 @@ void dapli_ib_thread_destroy(void) goto bail; g_ib_thread_state = IB_THREAD_CANCEL; - if (dapls_thread_signal() == -1) - dapl_log(DAPL_DBG_TYPE_UTIL, - " destroy: thread wakeup error = %s\n", - strerror(errno)); - while ((g_ib_thread_state != IB_THREAD_EXIT) && (retries--)) { + while (g_ib_thread_state != IB_THREAD_EXIT) { dapl_dbg_log(DAPL_DBG_TYPE_UTIL, " ib_thread_destroy: waiting for ib_thread\n"); if (dapls_thread_signal() == -1) -- 1.5.2.5 _______________________________________________ general mailing list general@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general