diff --git a/include/haproxy/hlua-t.h b/include/haproxy/hlua-t.h index 964654c44..775c8535e 100644 --- a/include/haproxy/hlua-t.h +++ b/include/haproxy/hlua-t.h @@ -58,6 +58,7 @@ struct stream; #define HLUA_WAKERESWR 0x00000004 #define HLUA_WAKEREQWR 0x00000008 #define HLUA_EXIT 0x00000010 +#define HLUA_NOYIELD 0x00000020 #define HLUA_F_AS_STRING 0x01 #define HLUA_F_MAY_USE_HTTP 0x02 diff --git a/include/haproxy/hlua.h b/include/haproxy/hlua.h index f13955296..21e4534af 100644 --- a/include/haproxy/hlua.h +++ b/include/haproxy/hlua.h @@ -39,6 +39,10 @@ #define HLUA_SET_WAKEREQWR(__hlua) do {(__hlua)->flags |= HLUA_WAKEREQWR;} while(0) #define HLUA_CLR_WAKEREQWR(__hlua) do {(__hlua)->flags &= ~HLUA_WAKEREQWR;} while(0) #define HLUA_IS_WAKEREQWR(__hlua) ((__hlua)->flags & HLUA_WAKEREQWR) +#define HLUA_CLR_NOYIELD(__hlua) do {(__hlua)->flags &= ~HLUA_NOYIELD;} while(0) +#define HLUA_SET_NOYIELD(__hlua) do {(__hlua)->flags |= HLUA_NOYIELD;} while(0) +#define HLUA_CANT_YIELD(__hlua) ((__hlua)->flags & HLUA_NOYIELD) + #define HLUA_INIT(__hlua) do { (__hlua)->T = 0; } while(0) diff --git a/src/hlua.c b/src/hlua.c index 6a9073e31..0de63422d 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -1277,6 +1277,9 @@ resume_execution: HLUA_CLR_CTRLYIELD(lua); HLUA_CLR_WAKERESWR(lua); HLUA_CLR_WAKEREQWR(lua); + HLUA_CLR_NOYIELD(lua); + if (!yield_allowed) + HLUA_SET_NOYIELD(lua); /* Update the start time and reset wake_time. */ lua->start_time = now_ms;