Sha256: 69b050d195cebcef4f27bc2cd604de05550158dd32c7e493977514cfdd157c5a

Contents?: true

Size: 1.89 KB

Versions: 14

Compression:

Stored size: 1.89 KB

Contents

// Copyright 2006-2008 the V8 project authors. All rights reserved.
//
// Tests of the TokenLock class from lock.h

#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>  // for usleep()

#include "v8.h"

#include "platform.h"
#include "cctest.h"

using namespace ::v8::internal;


static void yield() {
  usleep(1);
}

static const int kLockCounterLimit = 50;
static int busy_lock_counter = 0;


static void LoopIncrement(Mutex* mutex, int rem) {
  while (true) {
    int count = 0;
    int last_count = -1;
    do {
      CHECK_EQ(0, mutex->Lock());
      count = busy_lock_counter;
      CHECK_EQ(0, mutex->Unlock());
      yield();
    } while (count % 2 == rem && count < kLockCounterLimit);
    if (count >= kLockCounterLimit) break;
    CHECK_EQ(0, mutex->Lock());
    CHECK_EQ(count, busy_lock_counter);
    CHECK(last_count == -1 || count == last_count + 1);
    busy_lock_counter++;
    last_count = count;
    CHECK_EQ(0, mutex->Unlock());
    yield();
  }
}


static void* RunTestBusyLock(void* arg) {
  LoopIncrement(static_cast<Mutex*>(arg), 0);
  return 0;
}


// Runs two threads that repeatedly acquire the lock and conditionally
// increment a variable.
TEST(BusyLock) {
  pthread_t other;
  Mutex* mutex = OS::CreateMutex();
  int thread_created = pthread_create(&other,
                                      NULL,
                                      &RunTestBusyLock,
                                      mutex);
  CHECK_EQ(0, thread_created);
  LoopIncrement(mutex, 1);
  pthread_join(other, NULL);
  delete mutex;
}


TEST(VirtualMemory) {
  VirtualMemory* vm = new VirtualMemory(1 * MB);
  CHECK(vm->IsReserved());
  void* block_addr = vm->address();
  size_t block_size = 4 * KB;
  CHECK(vm->Commit(block_addr, block_size, false));
  // Check whether we can write to memory.
  int* addr = static_cast<int*>(block_addr);
  addr[KB-1] = 2;
  CHECK(vm->Uncommit(block_addr, block_size));
  delete vm;
}

Version data entries

14 entries across 12 versions & 4 rubygems

Version Path
mustang-0.0.1 vendor/v8/test/cctest/test-platform-linux.cc
rednode-0.1.2 ext/node/deps/v8/test/cctest/test-platform-linux.cc
rednode-0.1.1 ext/node/deps/v8/test/cctest/test-platform-linux.cc
rednode-0.1.0 ext/node/deps/v8/test/cctest/test-platform-linux.cc
tomato-0.0.1.prealpha2 ext/tomato/external/build/v8/test/cctest/test-platform-linux.cc
tomato-0.0.1.prealpha2 ext/tomato/external/v8/test/cctest/test-platform-linux.cc
tomato-0.0.1.prealpha1 ext/tomato/external/v8/test/cctest/test-platform-linux.cc
tomato-0.0.1.prealpha1 ext/tomato/external/build/v8/test/cctest/test-platform-linux.cc
therubyracer-0.4.8-x86-darwin-9 ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc
therubyracer-0.4.8-x86-darwin-10 ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc
therubyracer-0.4.8 ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc
therubyracer-0.4.7-x86-darwin-9 ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc
therubyracer-0.4.7-x86-darwin-10 ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc
therubyracer-0.4.7 ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc