From f424d73f950dec8a3a250aea86bbb43c7d55bced Mon Sep 17 00:00:00 2001 From: Arran Cudbard-Bell Date: Mon, 23 Jun 2014 22:14:06 +0100 Subject: [PATCH] Simpler VERIFY_REQUEST macro in process.c --- src/main/process.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/main/process.c b/src/main/process.c index 71a3f37..ba3e52e 100644 --- a/src/main/process.c +++ b/src/main/process.c @@ -108,24 +108,17 @@ static char const *child_state_names[REQUEST_CHILD_NUM_STATES] = { fr_event_insert(el, request_timer, request, \ &when, &request->ev); - -#ifdef HAVE_PTHREAD_H -#undef VERIFY_REQUEST - -#if defined(WITH_VERIFY_PTR) -# define VERIFY_REQUEST(_x) if (pthread_equal(pthread_self(), _x->child_pid) != 0) verify_request(__FILE__, __LINE__, _x) -#else /* - * Even if were building without WITH_VERIFY_PTR - * the pointer must not be NULL when these various macros are used - * so we can add some sneaky asserts. + * We need a different VERIFY_REQUEST macro in process.c + * To avoid the race conditions with the master thread + * checking the REQUEST whilst it's being worked on by + * the child. */ -# define VERIFY_REQUEST(_x) rad_assert(_x) -#endif - +#if defined(WITH_VERIFY_PTR) && defined(HAVE_PTHREAD_H) +# undef VERIFY_REQUEST +# define VERIFY_REQUEST(_x) if (pthread_equal(pthread_self(), _x->child_pid) != 0) verify_request(__FILE__, __LINE__, _x) #endif - /** * @section request_timeline * -- 2.1.4