Make XObject::GetWaitHandle a protected function
This commit is contained in:
parent
e619e4590c
commit
68f9949829
|
@ -36,14 +36,15 @@ class NotifyListener : public XObject {
|
||||||
bool DequeueNotification(XNotificationID* out_id, uint32_t* out_data);
|
bool DequeueNotification(XNotificationID* out_id, uint32_t* out_data);
|
||||||
bool DequeueNotification(XNotificationID id, uint32_t* out_data);
|
bool DequeueNotification(XNotificationID id, uint32_t* out_data);
|
||||||
|
|
||||||
xe::threading::WaitHandle* GetWaitHandle() override {
|
|
||||||
return wait_handle_.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Save(ByteStream* stream) override;
|
bool Save(ByteStream* stream) override;
|
||||||
static object_ref<NotifyListener> Restore(KernelState* kernel_state,
|
static object_ref<NotifyListener> Restore(KernelState* kernel_state,
|
||||||
ByteStream* stream);
|
ByteStream* stream);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
xe::threading::WaitHandle* GetWaitHandle() override {
|
||||||
|
return wait_handle_.get();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<xe::threading::Event> wait_handle_;
|
std::unique_ptr<xe::threading::Event> wait_handle_;
|
||||||
xe::global_critical_region global_critical_region_;
|
xe::global_critical_region global_critical_region_;
|
||||||
|
|
|
@ -37,12 +37,13 @@ class XEvent : public XObject {
|
||||||
int32_t Reset();
|
int32_t Reset();
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
xe::threading::WaitHandle* GetWaitHandle() override { return event_.get(); }
|
|
||||||
|
|
||||||
bool Save(ByteStream* stream) override;
|
bool Save(ByteStream* stream) override;
|
||||||
static object_ref<XEvent> Restore(KernelState* kernel_state,
|
static object_ref<XEvent> Restore(KernelState* kernel_state,
|
||||||
ByteStream* stream);
|
ByteStream* stream);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
xe::threading::WaitHandle* GetWaitHandle() override { return event_.get(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool manual_reset_ = false;
|
bool manual_reset_ = false;
|
||||||
std::unique_ptr<xe::threading::Event> event_;
|
std::unique_ptr<xe::threading::Event> event_;
|
||||||
|
|
|
@ -104,10 +104,6 @@ class XFile : public XObject {
|
||||||
X_STATUS Write(const void* buffer, size_t buffer_length, size_t byte_offset,
|
X_STATUS Write(const void* buffer, size_t buffer_length, size_t byte_offset,
|
||||||
size_t* out_bytes_written, uint32_t apc_context);
|
size_t* out_bytes_written, uint32_t apc_context);
|
||||||
|
|
||||||
xe::threading::WaitHandle* GetWaitHandle() override {
|
|
||||||
return async_event_.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RegisterIOCompletionPort(uint32_t key, object_ref<XIOCompletion> port);
|
void RegisterIOCompletionPort(uint32_t key, object_ref<XIOCompletion> port);
|
||||||
void RemoveIOCompletionPort(uint32_t key);
|
void RemoveIOCompletionPort(uint32_t key);
|
||||||
|
|
||||||
|
@ -118,6 +114,10 @@ class XFile : public XObject {
|
||||||
protected:
|
protected:
|
||||||
void NotifyIOCompletionPorts(XIOCompletion::IONotification& notification);
|
void NotifyIOCompletionPorts(XIOCompletion::IONotification& notification);
|
||||||
|
|
||||||
|
xe::threading::WaitHandle* GetWaitHandle() override {
|
||||||
|
return async_event_.get();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
XFile();
|
XFile();
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,12 @@ class XMutant : public XObject {
|
||||||
|
|
||||||
X_STATUS ReleaseMutant(uint32_t priority_increment, bool abandon, bool wait);
|
X_STATUS ReleaseMutant(uint32_t priority_increment, bool abandon, bool wait);
|
||||||
|
|
||||||
xe::threading::WaitHandle* GetWaitHandle() override { return mutant_.get(); }
|
|
||||||
|
|
||||||
bool Save(ByteStream* stream) override;
|
bool Save(ByteStream* stream) override;
|
||||||
static object_ref<XMutant> Restore(KernelState* kernel_state,
|
static object_ref<XMutant> Restore(KernelState* kernel_state,
|
||||||
ByteStream* stream);
|
ByteStream* stream);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
xe::threading::WaitHandle* GetWaitHandle() override { return mutant_.get(); }
|
||||||
void WaitCallback() override;
|
void WaitCallback() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -187,7 +187,6 @@ class XObject {
|
||||||
static object_ref<T> GetNativeObject(KernelState* kernel_state,
|
static object_ref<T> GetNativeObject(KernelState* kernel_state,
|
||||||
void* native_ptr, int32_t as_type = -1);
|
void* native_ptr, int32_t as_type = -1);
|
||||||
|
|
||||||
virtual xe::threading::WaitHandle* GetWaitHandle() { return nullptr; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool SaveObject(ByteStream* stream);
|
bool SaveObject(ByteStream* stream);
|
||||||
|
@ -195,6 +194,7 @@ class XObject {
|
||||||
|
|
||||||
// Called on successful wait.
|
// Called on successful wait.
|
||||||
virtual void WaitCallback() {}
|
virtual void WaitCallback() {}
|
||||||
|
virtual xe::threading::WaitHandle* GetWaitHandle() { return nullptr; }
|
||||||
|
|
||||||
// Creates the kernel object for guest code to use. Typically not needed.
|
// Creates the kernel object for guest code to use. Typically not needed.
|
||||||
uint8_t* CreateNative(uint32_t size);
|
uint8_t* CreateNative(uint32_t size);
|
||||||
|
|
|
@ -34,14 +34,15 @@ class XSemaphore : public XObject {
|
||||||
|
|
||||||
int32_t ReleaseSemaphore(int32_t release_count);
|
int32_t ReleaseSemaphore(int32_t release_count);
|
||||||
|
|
||||||
xe::threading::WaitHandle* GetWaitHandle() override {
|
|
||||||
return semaphore_.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Save(ByteStream* stream) override;
|
bool Save(ByteStream* stream) override;
|
||||||
static object_ref<XSemaphore> Restore(KernelState* kernel_state,
|
static object_ref<XSemaphore> Restore(KernelState* kernel_state,
|
||||||
ByteStream* stream);
|
ByteStream* stream);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
xe::threading::WaitHandle* GetWaitHandle() override {
|
||||||
|
return semaphore_.get();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<xe::threading::Semaphore> semaphore_;
|
std::unique_ptr<xe::threading::Semaphore> semaphore_;
|
||||||
uint32_t maximum_count_ = 0;
|
uint32_t maximum_count_ = 0;
|
||||||
|
|
|
@ -181,7 +181,6 @@ class XThread : public XObject {
|
||||||
X_STATUS Delay(uint32_t processor_mode, uint32_t alertable,
|
X_STATUS Delay(uint32_t processor_mode, uint32_t alertable,
|
||||||
uint64_t interval);
|
uint64_t interval);
|
||||||
|
|
||||||
xe::threading::WaitHandle* GetWaitHandle() override { return thread_.get(); }
|
|
||||||
xe::threading::Thread* thread() { return thread_.get(); }
|
xe::threading::Thread* thread() { return thread_.get(); }
|
||||||
|
|
||||||
virtual bool Save(ByteStream* stream) override;
|
virtual bool Save(ByteStream* stream) override;
|
||||||
|
@ -204,6 +203,8 @@ class XThread : public XObject {
|
||||||
void DeliverAPCs();
|
void DeliverAPCs();
|
||||||
void RundownAPCs();
|
void RundownAPCs();
|
||||||
|
|
||||||
|
xe::threading::WaitHandle* GetWaitHandle() override { return thread_.get(); }
|
||||||
|
|
||||||
CreationParams creation_params_ = {0};
|
CreationParams creation_params_ = {0};
|
||||||
|
|
||||||
uint32_t thread_id_ = 0;
|
uint32_t thread_id_ = 0;
|
||||||
|
|
|
@ -32,6 +32,7 @@ class XTimer : public XObject {
|
||||||
uint32_t routine_arg, bool resume);
|
uint32_t routine_arg, bool resume);
|
||||||
X_STATUS Cancel();
|
X_STATUS Cancel();
|
||||||
|
|
||||||
|
protected:
|
||||||
xe::threading::WaitHandle* GetWaitHandle() override { return timer_.get(); }
|
xe::threading::WaitHandle* GetWaitHandle() override { return timer_.get(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in New Issue