summaryrefslogtreecommitdiff
path: root/cop.h
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2010-04-15 11:37:53 +0100
committerNicholas Clark <nick@ccl4.org>2010-04-15 11:37:53 +0100
commitf410a2119920dd04690025a349e79575cfb9c972 (patch)
treeff2c2f6480e96613f0609b4b959385c90f78bcec /cop.h
parentd1515be42a17e7bb3fa584aea980f54524603f34 (diff)
downloadperl-f410a2119920dd04690025a349e79575cfb9c972.tar.gz
Move PERL_ASYNC_CHECK() from the runloop to control flow OPs.
For the typical code this gives a 5% speedup, and removes the cost of "safe signals". Tight looping code will show less gains, but should never be slower. Subtle bugs might remain - there might be constructions that enter the runloop (where signals used to be dispatched) but don't contain any PERL_ASYNC_CHECK() calls themselves.
Diffstat (limited to 'cop.h')
-rw-r--r--cop.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/cop.h b/cop.h
index 6c51d73285..420a5d1790 100644
--- a/cop.h
+++ b/cop.h
@@ -592,6 +592,7 @@ struct block {
/* Exit a block (RETURN and LAST). */
#define POPBLOCK(cx,pm) \
DEBUG_CX("POP"); \
+ PERL_ASYNC_CHECK(); \
cx = &cxstack[cxstack_ix--], \
newsp = PL_stack_base + cx->blk_oldsp, \
PL_curcop = cx->blk_oldcop, \