Skip to content

Instantly share code, notes, and snippets.

@misterdjules
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save misterdjules/ab9ce4271c5dd635a3c9 to your computer and use it in GitHub Desktop.
Save misterdjules/ab9ce4271c5dd635a3c9 to your computer and use it in GitHub Desktop.
diff --git a/src/node_v8_platform.cc b/src/node_v8_platform.cc
index 566fd79..94af58f 100644
--- a/src/node_v8_platform.cc
+++ b/src/node_v8_platform.cc
@@ -101,11 +101,11 @@ void Platform::WorkerBody(void* arg) {
TaskQueue::TaskQueue() {
int err;
- STATIC_ASSERT(kRingSize == (kRingSize & (~(kRingSize - 1))));
+ STATIC_ASSERT(kRingSize == (kRingSize & ~kRingMask));
+
+ for (size_t i = 0; i < ARRAY_SIZE(ring_); i += 1)
+ ring_[i] = nullptr;
- size_ = kRingSize;
- ring_ = new Task*[size_];
- mask_ = size_ - 1;
read_off_ = 0;
write_off_ = 0;
@@ -123,8 +123,6 @@ TaskQueue::TaskQueue() {
TaskQueue::~TaskQueue() {
CHECK_EQ(read_off_, write_off_);
- delete[] ring_;
- ring_ = NULL;
uv_sem_destroy(&sem_);
uv_cond_destroy(&cond_);
uv_mutex_destroy(&mutex_);
@@ -140,7 +138,7 @@ void TaskQueue::Push(Task* task) {
ring_[write_off_] = task;
write_off_++;
- write_off_ &= mask_;
+ write_off_ &= kRingMask;
uv_mutex_unlock(&mutex_);
uv_sem_post(&sem_);
@@ -156,7 +154,7 @@ Task* TaskQueue::Shift() {
uv_cond_signal(&cond_);
read_off_++;
- read_off_ &= mask_;
+ read_off_ &= kRingMask;
uv_mutex_unlock(&mutex_);
return task;
diff --git a/src/node_v8_platform.h b/src/node_v8_platform.h
index d8bc737..1a393c1 100644
--- a/src/node_v8_platform.h
+++ b/src/node_v8_platform.h
@@ -37,15 +37,14 @@ class TaskQueue {
private:
static const unsigned int kRingSize = 1024;
+ static const unsigned int kRingMask = kRingSize - 1;
uv_sem_t sem_;
uv_cond_t cond_;
uv_mutex_t mutex_;
- v8::Task** ring_;
- unsigned int size_;
- unsigned int mask_;
unsigned int read_off_;
unsigned int write_off_;
+ v8::Task* ring_[kRingSize];
};
class Platform : public v8::Platform {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment