Bläddra i källkod

Use std::deque for timer_stack

In order to update limits at runtime we need the stack to be iterable.
Stefan Siegl 10 år sedan
förälder
incheckning
ab6df6f14f
2 ändrade filer med 8 tillägg och 8 borttagningar
  1. 2 2
      php_v8js_macros.h
  2. 6 6
      v8js.cc

+ 2 - 2
php_v8js_macros.h

@@ -34,7 +34,7 @@ extern "C" {
 #include <v8.h>
 
 #include <chrono>
-#include <stack>
+#include <deque>
 #include <thread>
 
 #include <map>
@@ -222,7 +222,7 @@ ZEND_BEGIN_MODULE_GLOBALS(v8js)
   bool use_date; /* Generate JS Date objects instead of PHP DateTime */
 
   // Timer thread globals
-  std::stack<php_v8js_timer_ctx *> timer_stack;
+  std::deque<php_v8js_timer_ctx *> timer_stack;
   std::thread *timer_thread;
   std::mutex timer_mutex;
   bool timer_stop;

+ 6 - 6
v8js.cc

@@ -1069,7 +1069,7 @@ static void php_v8js_timer_push(long time_limit, long memory_limit, php_v8js_ctx
 	timer_ctx->time_point = from + duration;
 	timer_ctx->v8js_ctx = c;
 	timer_ctx->killed = false;
-	V8JSG(timer_stack).push(timer_ctx);
+	V8JSG(timer_stack).push_front(timer_ctx);
 
 	V8JSG(timer_mutex).unlock();
 }
@@ -1089,7 +1089,7 @@ static void php_v8js_timer_thread(TSRMLS_D)
 
 		if (V8JSG(timer_stack).size()) {
 			// Get the current timer context
-			php_v8js_timer_ctx *timer_ctx = V8JSG(timer_stack).top();
+			php_v8js_timer_ctx *timer_ctx = V8JSG(timer_stack).front();
 			php_v8js_ctx *c = timer_ctx->v8js_ctx;
 
 			// Get memory usage statistics for the isolate
@@ -1223,8 +1223,8 @@ static void php_v8js_call_v8(php_v8js_ctx *c, zval **return_value,
 	/* Pop our context from the stack and read (possibly updated) limits
 	 * into local variables. */
 	V8JSG(timer_mutex).lock();
-	php_v8js_timer_ctx *timer_ctx = V8JSG(timer_stack).top();
-	V8JSG(timer_stack).pop();
+	php_v8js_timer_ctx *timer_ctx = V8JSG(timer_stack).front();
+	V8JSG(timer_stack).pop_front();
 	V8JSG(timer_mutex).unlock();
 
 	time_limit = timer_ctx->time_limit;
@@ -2180,7 +2180,7 @@ static PHP_GINIT_FUNCTION(v8js)
 	v8js_globals->timer_thread = NULL;
 	v8js_globals->timer_stop = false;
 	new(&v8js_globals->timer_mutex) std::mutex;
-	new(&v8js_globals->timer_stack) std::stack<php_v8js_timer_ctx *>;
+	new(&v8js_globals->timer_stack) std::deque<php_v8js_timer_ctx *>;
 
 	v8js_globals->fatal_error_abort = 0;
 	v8js_globals->error_num = 0;
@@ -2207,7 +2207,7 @@ static PHP_GSHUTDOWN_FUNCTION(v8js)
 	}
 
 #ifdef ZTS
-	v8js_globals->timer_stack.~stack();
+	v8js_globals->timer_stack.~deque();
 	v8js_globals->timer_mutex.~mutex();
 #endif
 }