Index: mojo/public/python/mojo/system.pyx |
diff --git a/mojo/public/python/mojo/system.pyx b/mojo/public/python/mojo/system.pyx |
index f0a814a5e62eb8a4c5c6f4ad51c9451023383692..35b8093fd8ae402a09909dd74c1c68f2cbc68ad0 100644 |
--- a/mojo/public/python/mojo/system.pyx |
+++ b/mojo/public/python/mojo/system.pyx |
@@ -5,7 +5,6 @@ |
# distutils language = c++ |
cimport c_core |
-cimport c_environment |
from cpython.buffer cimport PyBUF_CONTIG |
@@ -21,6 +20,8 @@ from libc.stdint cimport int32_t, int64_t, uint32_t, uint64_t, uintptr_t |
import ctypes |
import threading |
+import mojo.system_impl |
+ |
def SetSystemThunks(system_thunks_as_object): |
"""Bind the basic Mojo Core functions. |
@@ -29,6 +30,7 @@ def SetSystemThunks(system_thunks_as_object): |
cdef const c_core.MojoSystemThunks* system_thunks = ( |
<const c_core.MojoSystemThunks*><uintptr_t>system_thunks_as_object) |
c_core.MojoSetSystemThunks(system_thunks) |
+ mojo.system_impl.SetSystemThunks(system_thunks_as_object) |
HANDLE_INVALID = c_core.MOJO_HANDLE_INVALID |
RESULT_OK = c_core.MOJO_RESULT_OK |
@@ -347,7 +349,7 @@ cdef class Handle(object): |
cdef c_core.MojoHandle handle = self._mojo_handle |
cdef c_core.MojoHandleSignals csignals = signals |
cdef c_core.MojoDeadline cdeadline = deadline |
- cdef c_environment.MojoAsyncWaitID wait_id = _ASYNC_WAITER.AsyncWait( |
+ wait_id = _ASYNC_WAITER.AsyncWait( |
handle, |
csignals, |
cdeadline, |
@@ -734,46 +736,40 @@ class DuplicateSharedBufferOptions(object): |
_RUN_LOOPS = threading.local() |
-cdef class RunLoop(object): |
+class RunLoop(object): |
"""RunLoop to use when using asynchronous operations on handles.""" |
- cdef c_environment.CRunLoop* c_run_loop |
- |
def __init__(self): |
- assert not <uintptr_t>(c_environment.CRunLoopCurrent()) |
- self.c_run_loop = new c_environment.CRunLoop() |
+ self.__run_loop = mojo.system_impl.RunLoop() |
_RUN_LOOPS.loop = id(self) |
- def __dealloc__(self): |
+ def __del__(self): |
del _RUN_LOOPS.loop |
- del self.c_run_loop |
- |
- @staticmethod |
- def Current(): |
- if hasattr(_RUN_LOOPS, 'loop'): |
- return ctypes.cast(_RUN_LOOPS.loop, ctypes.py_object).value |
- return None |
def Run(self): |
"""Run the runloop until Quit is called.""" |
- self.c_run_loop.Run() |
+ return self.__run_loop.Run() |
def RunUntilIdle(self): |
"""Run the runloop until Quit is called or no operation is waiting.""" |
- self.c_run_loop.RunUntilIdle() |
+ return self.__run_loop.RunUntilIdle() |
def Quit(self): |
"""Quit the runloop.""" |
- self.c_run_loop.Quit() |
+ return self.__run_loop.Quit() |
def PostDelayedTask(self, runnable, delay=0): |
""" |
Post a task on the runloop. This must be called from the thread owning the |
runloop. |
""" |
- cdef c_environment.CClosure closure = c_environment.BuildClosure(runnable) |
- self.c_run_loop.PostDelayedTask(closure, delay) |
+ return self.__run_loop.PostDelayedTask(runnable, delay) |
+ |
+ @staticmethod |
+ def Current(): |
+ if hasattr(_RUN_LOOPS, 'loop'): |
+ return ctypes.cast(_RUN_LOOPS.loop, ctypes.py_object).value |
+ return None |
-cdef c_environment.CEnvironment* _ENVIRONMENT = new c_environment.CEnvironment() |
-cdef c_environment.PythonAsyncWaiter* _ASYNC_WAITER = new c_environment.PythonAsyncWaiter() |
+_ASYNC_WAITER = mojo.system_impl.ASYNC_WAITER |