From 4ef0fe5222ea358e393198ceda0f8780f823a359 Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Mon, 21 Sep 2015 11:50:54 -0400 Subject: [PATCH] Simplify final state transitions with a macro --- src/main/process.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/main/process.c b/src/main/process.c index 3d20e38..feb1fa3 100644 --- a/src/main/process.c +++ b/src/main/process.c @@ -285,6 +285,12 @@ static bool we_are_master(void) # define ASSERT_MASTER #endif +/* + * Make state transitions simpler. + */ +#define FINAL_STATE(_x) NO_CHILD_THREAD; request->component = ""; request->module = "<" #_x ">"; request->child_state = _x + + static int event_new_fd(rad_listen_t *this); /* @@ -613,9 +619,7 @@ static void request_done(REQUEST *request, int action) * and wait for the master thread timer to clean us up. */ if (!we_are_master()) { - NO_CHILD_THREAD; - request->module = ""; - request->child_state = REQUEST_DONE; + FINAL_STATE(REQUEST_DONE); return; } #endif @@ -852,9 +856,7 @@ static void request_cleanup_delay_init(REQUEST *request) request->process = request_cleanup_delay; if (!we_are_master()) { - NO_CHILD_THREAD; - request->module = ""; - request->child_state = REQUEST_CLEANUP_DELAY; + FINAL_STATE(REQUEST_CLEANUP_DELAY); return; } @@ -1343,9 +1345,7 @@ static void request_finish(REQUEST *request, int action) */ if (request->packet->dst_port == 0) { RDEBUG("Finished internally proxied request."); - NO_CHILD_THREAD; - request->module = ""; - request->child_state = REQUEST_DONE; + FINAL_STATE(REQUEST_DONE); return; } @@ -1464,9 +1464,6 @@ static void request_finish(REQUEST *request, int action) done: RDEBUG2("Finished request"); - request->component = ""; - request->module = ""; - request_cleanup_delay_init(request); } else { @@ -1478,12 +1475,9 @@ static void request_finish(REQUEST *request, int action) RDEBUG2("Delaying response for %d.%06d seconds", (int) request->response_delay.tv_sec, (int) request->response_delay.tv_usec); request->listener->encode(request->listener, request); - request->component = ""; - request->module = ""; request->process = request_response_delay; - NO_CHILD_THREAD; - request->module = ""; - request->child_state = REQUEST_RESPONSE_DELAY; + + FINAL_STATE(REQUEST_RESPONSE_DELAY); } } @@ -1525,10 +1519,7 @@ static void request_running(REQUEST *request, int action) child_state_names[request->child_state], child_state_names[REQUEST_DONE]); #endif - - NO_CHILD_THREAD; - request->module = ""; - request->child_state = REQUEST_DONE; + FINAL_STATE(REQUEST_DONE); break; } @@ -3246,6 +3237,7 @@ static int request_proxy(REQUEST *request, int retransmit) */ request->process = proxy_wait_for_reply; request->child_state = REQUEST_PROXIED; + request->component = ""; request->module = ""; NO_CHILD_THREAD; -- 2.1.4