diff options
author | Thomas Harning Jr <harningt@gmail.com> | 2007-08-18 20:57:33 +0000 |
---|---|---|
committer | Thomas Harning Jr <harningt@gmail.com> | 2007-08-18 20:57:33 +0000 |
commit | 663fa798eeda2d1c66351d707c2f7e9cb2a9cf00 (patch) | |
tree | be8a04fdf08eb4865dc55f6c9f7032d9ba93b403 /luaevent/COROUTINE_MANAGEMENT | |
parent | dbea9370eb58cdc3cbd1b12d8c8735582370cd6e (diff) | |
download | luaevent-prosody-663fa798eeda2d1c66351d707c2f7e9cb2a9cf00.tar.gz luaevent-prosody-663fa798eeda2d1c66351d707c2f7e9cb2a9cf00.zip |
* Committing what will be version 0.1.2
Main feature:
Callback/coroutine issues resolved as described in COROUTINE_MANAGEMENT
Diffstat (limited to 'luaevent/COROUTINE_MANAGEMENT')
-rw-r--r-- | luaevent/COROUTINE_MANAGEMENT | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/luaevent/COROUTINE_MANAGEMENT b/luaevent/COROUTINE_MANAGEMENT new file mode 100644 index 0000000..1af0cb4 --- /dev/null +++ b/luaevent/COROUTINE_MANAGEMENT @@ -0,0 +1,39 @@ +Due to the issue w/ self-resuming threads and crashing out threads, +a management system needs to be in place. + +Example thread system: + +MAIN +EVENT_LOOP --------running--- +WAITING ON READ +WAITING ON WRITE +WAITING ON CONNECT + + +Since main and the other 'waiting' threads are yielded, it is unsafe to call things arbitrarily on them +or resume them from themselves... +However the EVENT_LOOP one is running and thus can execute the callbacks (which can resume the threads) +Each of the 'waiting' events are attached to an event and contain a pointer, this pointer can be setup to point +to a per event_base item which will be updated w/ the lua_State of whatever calls EVENT_LOOP... +this will guarantee that the thread will be resumed from the currently running EVENT_LOOP + + +Other system that's more complicated and less likely: + +MAIN +EVENT_LOOP a -----running--- + +WAITING ON READ a +WAITING ON WRITE a + +EVENT_LOOP b ----yielded +WAITING ON READ b + + +Since there can only be one event_loop running per event_base, you do not have to worry about +cross-pollination of the different waits... + +NOTES: +If the event_loop thread goes away... then the waiting coroutines will have no way to get back... +though in this case, they are dead in the water anyways.. until a new event_loop starts... +in which case the lua_State references has been updated...
\ No newline at end of file |