aboutsummaryrefslogtreecommitdiffstats
path: root/luaevent/COROUTINE_MANAGEMENT
diff options
context:
space:
mode:
authorThomas Harning Jr <harningt@gmail.com>2007-08-18 20:57:33 +0000
committerThomas Harning Jr <harningt@gmail.com>2007-08-18 20:57:33 +0000
commit663fa798eeda2d1c66351d707c2f7e9cb2a9cf00 (patch)
treebe8a04fdf08eb4865dc55f6c9f7032d9ba93b403 /luaevent/COROUTINE_MANAGEMENT
parentdbea9370eb58cdc3cbd1b12d8c8735582370cd6e (diff)
downloadluaevent-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_MANAGEMENT39
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