예제 #1
0
파일: thread.cpp 프로젝트: CarterTsai/alux
void Thread::Dealloc() {
  AssertNoncritical();
  
  // destroy all the ports on this thread
  for (int i = 0; i < portList.GetMap().GetBucketCount(); ++i) {
    auto & bucket = portList.GetMap().GetBucket(i);
    for (auto j = bucket.GetStart(); j != bucket.GetEnd(); ++j) {
      ThreadPort & p = *j;
      p.Sever();
      p.Dealloc(false);
    }
  }
  
  if (inScheduler) {
    GetTask().GetScheduler().Remove(*this);
  }
  if (killed) {
    if (inTask) {
      GetTask().GetThreadList().Remove(*this);
    }
    GetTask().Release();
  }
  
  delete this;
}
예제 #2
0
파일: new.cpp 프로젝트: CarterTsai/alux
void * operator new(size_t s) {
  AssertNoncritical();
  void * result;
  if (!anarch::Domain::GetCurrent().Alloc(result, s)) {
    return NULL;
  }
  return result;
}
예제 #3
0
void GarbageCollector::Main() {
  AssertNoncritical();
  while (1) {
    anarch::SetCritical(true);
    objectsLock.Seize();
    GarbageObject * obj = objects.Shift();
    if (!obj) {
      scheduler.SetInfiniteTimeout(objectsLock);
      anarch::SetCritical(false);
    } else {
      objectsLock.Release();
      anarch::SetCritical(false);
      obj->Dealloc();
    }
  }
}
예제 #4
0
파일: lock.cpp 프로젝트: groundwater/anarch
void NoncriticalLock::SeizeYielding() {
  AssertNoncritical();
  super::SeizeYielding();
}
예제 #5
0
파일: lock.cpp 프로젝트: groundwater/anarch
void NoncriticalLock::Release() {
  AssertNoncritical();
  super::Release();
}
예제 #6
0
파일: lock.cpp 프로젝트: groundwater/anarch
void NoncriticalLock::Seize() {
  AssertNoncritical();
  super::Seize();
}
예제 #7
0
Terminal & Terminal::New(Port * p, GarbageCollector & c) {
  AssertNoncritical();
  Terminal * t = new Terminal(p, c);
  assert(t != NULL);
  return *t;
}
예제 #8
0
void Terminal::Hangup() {
  AssertNoncritical();
  if (connection) {
    connection->Close(*this);
  }
}
예제 #9
0
void Terminal::Dealloc() {
  AssertNoncritical();
  Hangup();
  delete this;
}
예제 #10
0
KernelTask & KernelTask::New(Scheduler & s) {
  AssertNoncritical();
  KernelTask * t = new KernelTask(s);
  assert(t != NULL);
  return *t;
}
예제 #11
0
파일: thread.cpp 프로젝트: CarterTsai/alux
Thread & Thread::New(Task & t, anarch::State & s) {
  AssertNoncritical();
  Thread * result = new Thread(t, s);
  assert(result != NULL);
  return *result;
}
예제 #12
0
파일: new.cpp 프로젝트: CarterTsai/alux
void operator delete[](void * p) {
  AssertNoncritical();
  anarch::Domain::GetCurrent().Free(p);
}
예제 #13
0
파일: hpet.cpp 프로젝트: unixpickle/anarch
void Hpet::Stop() {
  AssertNoncritical();
  ScopedCritical critical;
  volatile uint64_t * regs = (volatile uint64_t *)map.GetStart();
  regs[2] &= ~(uint64_t)1;
}