Real modules and threads (mostly).
Need events/waiting to get proper launch thread behavior.
This commit is contained in:
62
src/kernel/modules/xboxkrnl/xobject.cc
Normal file
62
src/kernel/modules/xboxkrnl/xobject.cc
Normal file
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2013 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#include "kernel/modules/xboxkrnl/xobject.h"
|
||||
|
||||
|
||||
using namespace xe;
|
||||
using namespace xe::kernel;
|
||||
using namespace xe::kernel::xboxkrnl;
|
||||
|
||||
|
||||
XObject::XObject(KernelState* kernel_state, Type type) :
|
||||
kernel_state_(kernel_state),
|
||||
ref_count_(1),
|
||||
type_(type), handle_(X_INVALID_HANDLE_VALUE) {
|
||||
handle_ = kernel_state->InsertObject(this);
|
||||
}
|
||||
|
||||
XObject::~XObject() {
|
||||
XEASSERTZERO(ref_count_);
|
||||
|
||||
if (handle_ != X_INVALID_HANDLE_VALUE) {
|
||||
// Remove from state table.
|
||||
kernel_state_->RemoveObject(this);
|
||||
}
|
||||
}
|
||||
|
||||
Runtime* XObject::runtime() {
|
||||
return kernel_state_->runtime_;
|
||||
}
|
||||
|
||||
KernelState* XObject::kernel_state() {
|
||||
return kernel_state_;
|
||||
}
|
||||
|
||||
xe_memory_ref XObject::memory() {
|
||||
return kernel_state_->memory();
|
||||
}
|
||||
|
||||
XObject::Type XObject::type() {
|
||||
return type_;
|
||||
}
|
||||
|
||||
X_HANDLE XObject::handle() {
|
||||
return handle_;
|
||||
}
|
||||
|
||||
void XObject::Retain() {
|
||||
xe_atomic_inc_32(&ref_count_);
|
||||
}
|
||||
|
||||
void XObject::Release() {
|
||||
if (!xe_atomic_dec_32(&ref_count_)) {
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user