[sr-dev] git:master: core: fix run_actions w/o USE_LONGJMP

Andrei Pelinescu-Onciul andrei at iptel.org
Thu Mar 25 22:16:23 CET 2010


Module: sip-router
Branch: master
Commit: cf2ecfaa0dd1b316e405d508eac4f4b9ae2296b7
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cf2ecfaa0dd1b316e405d508eac4f4b9ae2296b7

Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei at iptel.org>
Date:   Thu Mar 25 22:06:42 2010 +0100

core: fix run_actions w/o USE_LONGJMP

- fix retcode not set in run_actions() if USE_LONGJMP is not
  defined.
- minor optimizations (likely()/unlikely()).

---

 action.c |   20 ++++++++++----------
 1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/action.c b/action.c
index ef33814..c4823e6 100644
--- a/action.c
+++ b/action.c
@@ -1282,18 +1282,18 @@ int run_actions(struct run_act_ctx* h, struct action* a, struct sip_msg* msg)
 
 	ret=E_UNSPEC;
 	h->rec_lev++;
-	if (h->rec_lev>ROUTE_MAX_REC_LEV){
+	if (unlikely(h->rec_lev>ROUTE_MAX_REC_LEV)){
 		LOG(L_ERR, "WARNING: too many recursive routing table lookups (%d)"
 					" giving up!\n", h->rec_lev);
 		ret=E_UNSPEC;
 		goto error;
 	}
-	if (h->rec_lev==1){
+	if (unlikely(h->rec_lev==1)){
 		h->run_flags=0;
 		h->last_retcode=0;
 		_last_returned_code = h->last_retcode;
 #ifdef USE_LONGJMP
-		if (setjmp(h->jmp_env)){
+		if (unlikely(setjmp(h->jmp_env))){
 			h->rec_lev=0;
 			ret=h->last_retcode;
 			goto end;
@@ -1301,7 +1301,7 @@ int run_actions(struct run_act_ctx* h, struct action* a, struct sip_msg* msg)
 #endif
 	}
 
-	if (a==0){
+	if (unlikely(a==0)){
 		DBG("DEBUG: run_actions: null action list (rec_level=%d)\n",
 				h->rec_lev);
 		ret=1;
@@ -1311,11 +1311,11 @@ int run_actions(struct run_act_ctx* h, struct action* a, struct sip_msg* msg)
 		ret=do_action(h, t, msg);
 		/* break, return or drop/exit stop execution of the current
 		   block */
-		if (h->run_flags & (BREAK_R_F|RETURN_R_F|EXIT_R_F)){
-			if (h->run_flags & EXIT_R_F){
-#ifdef USE_LONGJMP
+		if (unlikely(h->run_flags & (BREAK_R_F|RETURN_R_F|EXIT_R_F))){
+			if (unlikely(h->run_flags & EXIT_R_F)) {
 				h->last_retcode=ret;
 				_last_returned_code = h->last_retcode;
+#ifdef USE_LONGJMP
 				longjmp(h->jmp_env, ret);
 #endif
 			}
@@ -1327,10 +1327,10 @@ int run_actions(struct run_act_ctx* h, struct action* a, struct sip_msg* msg)
 	h->rec_lev--;
 end:
 	/* process module onbreak handlers if present */
-	if (h->rec_lev==0 && ret==0)
+	if (unlikely(h->rec_lev==0 && ret==0))
 		for (mod=modules;mod;mod=mod->next)
-			if ((mod->mod_interface_ver==0) && mod->exports && 
-					mod->exports->v0.onbreak_f) {
+			if (unlikely((mod->mod_interface_ver==0) && mod->exports && 
+					mod->exports->v0.onbreak_f)) {
 				mod->exports->v0.onbreak_f( msg );
 				DBG("DEBUG: %s onbreak handler called\n",
 						mod->exports->c.name);




More information about the sr-dev mailing list