The data contained in this repository can be downloaded to your computer using one of several clients.
Please see the documentation of your version control software client for more information.

Please select the desired protocol below to get the URL.

This URL has Read-Only access.

Statistics
| Branch: | Revision:

main_repo / deps / v8 / test / cctest / test-platform-nullos.cc @ 40c0f755

History | View | Annotate | Download (1.89 KB)

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

    
5
#include <pthread.h>
6
#include <stdlib.h>
7
#include <unistd.h>  // for usleep()
8

    
9
#include "v8.h"
10

    
11
#include "platform.h"
12
#include "cctest.h"
13

    
14
using namespace ::v8::internal;
15

    
16

    
17
static void yield() {
18
  UNIMPLEMENTED();
19
}
20

    
21
static const int kLockCounterLimit = 50;
22
static int busy_lock_counter = 0;
23

    
24

    
25
static void LoopIncrement(Mutex* mutex, int rem) {
26
  while (true) {
27
    int count = 0;
28
    int last_count = -1;
29
    do {
30
      CHECK_EQ(0, mutex->Lock());
31
      count = busy_lock_counter;
32
      CHECK_EQ(0, mutex->Unlock());
33
      yield();
34
    } while (count % 2 == rem && count < kLockCounterLimit);
35
    if (count >= kLockCounterLimit) break;
36
    CHECK_EQ(0, mutex->Lock());
37
    CHECK_EQ(count, busy_lock_counter);
38
    CHECK(last_count == -1 || count == last_count + 1);
39
    busy_lock_counter++;
40
    last_count = count;
41
    CHECK_EQ(0, mutex->Unlock());
42
    yield();
43
  }
44
}
45

    
46

    
47
static void* RunTestBusyLock(void* arg) {
48
  LoopIncrement(static_cast<Mutex*>(arg), 0);
49
  return 0;
50
}
51

    
52

    
53
// Runs two threads that repeatedly acquire the lock and conditionally
54
// increment a variable.
55
TEST(BusyLock) {
56
  pthread_t other;
57
  Mutex* mutex = OS::CreateMutex();
58
  int thread_created = pthread_create(&other,
59
                                      NULL,
60
                                      &RunTestBusyLock,
61
                                      mutex);
62
  CHECK_EQ(0, thread_created);
63
  LoopIncrement(mutex, 1);
64
  pthread_join(other, NULL);
65
  delete mutex;
66
}
67

    
68

    
69
TEST(VirtualMemory) {
70
  VirtualMemory* vm = new VirtualMemory(1 * MB);
71
  CHECK(vm->IsReserved());
72
  void* block_addr = vm->address();
73
  size_t block_size = 4 * KB;
74
  CHECK(vm->Commit(block_addr, block_size, false));
75
  // Check whether we can write to memory.
76
  int* addr = static_cast<int*>(block_addr);
77
  addr[KB-1] = 2;
78
  CHECK(vm->Uncommit(block_addr, block_size));
79
  delete vm;
80
}