Sorry for the delay.... On 5/15/19 10:55 PM, Xiubo Li wrote: > Hey ping. > > What's the state of this patch and will it make sense here? I'm not sure it does make sense.... Shouldn't the mutex lock be in the call of svc_run()? steved. > > Thanks > BRs > > On 2019/4/9 19:37, xiubli@xxxxxxxxxx wrote: >> From: Xiubo Li <xiubli@xxxxxxxxxx> >> >> In gluster-block project and there are 2 separate threads, both >> of which will run the svc_run loop, this could work well in glibc >> version, but in libtirpc we are hitting the random crash and stuck >> issues. >> >> More detail please see: >> https://github.com/gluster/gluster-block/pull/182 >> >> Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx> >> --- >> src/svc_run.c | 19 +++++++++++++++++++ >> 1 file changed, 19 insertions(+) >> >> diff --git a/src/svc_run.c b/src/svc_run.c >> index f40314b..b295755 100644 >> --- a/src/svc_run.c >> +++ b/src/svc_run.c >> @@ -38,12 +38,17 @@ >> #include <string.h> >> #include <unistd.h> >> #include <sys/poll.h> >> +#include <syslog.h> >> +#include <stdbool.h> >> #include <rpc/rpc.h> >> #include "rpc_com.h" >> #include <sys/select.h> >> +static bool svc_loop_running = false; >> +static pthread_mutex_t svc_run_lock = PTHREAD_MUTEX_INITIALIZER; >> + >> void >> svc_run() >> { >> @@ -51,6 +56,16 @@ svc_run() >> struct pollfd *my_pollfd = NULL; >> int last_max_pollfd = 0; >> + pthread_mutex_lock(&svc_run_lock); >> + if (svc_loop_running) { >> + pthread_mutex_unlock(&svc_run_lock); >> + syslog (LOG_ERR, "svc_run: svc loop is already running in current process %d", getpid()); >> + return; >> + } >> + >> + svc_loop_running = true; >> + pthread_mutex_unlock(&svc_run_lock); >> + >> for (;;) { >> int max_pollfd = svc_max_pollfd; >> if (max_pollfd == 0 && svc_pollfd == NULL) >> @@ -111,4 +126,8 @@ svc_exit() >> svc_pollfd = NULL; >> svc_max_pollfd = 0; >> rwlock_unlock(&svc_fd_lock); >> + >> + pthread_mutex_lock(&svc_run_lock); >> + svc_loop_running = false; >> + pthread_mutex_unlock(&svc_run_lock); >> } > > > > > _______________________________________________ > Libtirpc-devel mailing list > Libtirpc-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.sourceforge.net/lists/listinfo/libtirpc-devel