gallus_result_t gallus_module_wait_all(gallus_chrono_t nsec) { gallus_result_t ret = GALLUS_RESULT_ANY_FAILURES; s_lock(); { s_gstate = MODULE_GLOBAL_STATE_WAITING; if (s_n_modules > 0) { gallus_result_t first_err = GALLUS_RESULT_OK; size_t i; a_module *mptr; /* * Reverse order. */ if (nsec < 0LL) { for (i = 0; i < s_n_modules; i++) { mptr = &(s_modules[s_n_modules - i - 1]); ret = s_wait_module(mptr, -1LL); if (ret != GALLUS_RESULT_OK) { gallus_perror(ret); gallus_msg_error("can't wait module \"%s\".\n", mptr->m_name); if (first_err == GALLUS_RESULT_OK) { first_err = ret; } } /* * Just carry on wait no matter what kind of errors * occur. */ } } else { gallus_chrono_t w_begin; gallus_chrono_t w_end; gallus_chrono_t w = nsec; for (i = 0; i < s_n_modules; i++) { mptr = &(s_modules[s_n_modules - i - 1]); WHAT_TIME_IS_IT_NOW_IN_NSEC(w_begin); ret = s_wait_module(mptr, w); WHAT_TIME_IS_IT_NOW_IN_NSEC(w_end); if (ret != GALLUS_RESULT_OK) { gallus_perror(ret); gallus_msg_error("can't wait module \"%s\".\n", mptr->m_name); if (first_err == GALLUS_RESULT_OK) { first_err = ret; } } /* * Just carry on wait no matter what kind of errors * occur. */ w = nsec - (w_end - w_begin); if (w < 0LL) { w = 0LL; } } } ret = first_err; } else { ret = GALLUS_RESULT_OK; } if (ret == GALLUS_RESULT_OK) { s_gstate = MODULE_GLOBAL_STATE_SHUTDOWN; } } s_unlock(); return ret; }
lagopus_result_t lagopus_module_wait_all(lagopus_chrono_t nsec) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; s_lock(); { if (s_n_modules > 0) { lagopus_result_t first_err = LAGOPUS_RESULT_OK; size_t i; a_module *mptr; /* * Reverse order. */ if (nsec < 0LL) { for (i = 0; i < s_n_modules; i++) { mptr = &(s_modules[s_n_modules - i - 1]); ret = s_wait_module(mptr, -1LL); if (ret != LAGOPUS_RESULT_OK) { lagopus_perror(ret); lagopus_msg_error("can't wait module \"%s\".\n", mptr->m_name); if (first_err == LAGOPUS_RESULT_OK) { first_err = ret; } } /* * Just carry on wait no matter what kind of errors * occur. */ } } else { lagopus_chrono_t w_begin; lagopus_chrono_t w_end; lagopus_chrono_t w = nsec; for (i = 0; i < s_n_modules; i++) { mptr = &(s_modules[s_n_modules - i - 1]); WHAT_TIME_IS_IT_NOW_IN_NSEC(w_begin); ret = s_wait_module(mptr, w); WHAT_TIME_IS_IT_NOW_IN_NSEC(w_end); if (ret != LAGOPUS_RESULT_OK) { lagopus_perror(ret); lagopus_msg_error("can't wait module \"%s\".\n", mptr->m_name); if (first_err == LAGOPUS_RESULT_OK) { first_err = ret; } } /* * Just carry on wait no matter what kind of errors * occur. */ w = nsec - (w_end - w_begin); if (w < 0LL) { w = 0LL; } } } ret = first_err; } else { ret = LAGOPUS_RESULT_OK; } } s_unlock(); return ret; }