home *** CD-ROM | disk | FTP | other *** search
- TODO:
-
- * Ensure that we can have our 'non-threaded' thread be any thread.
-
- * Turn off the global 'fast_calls' variable, to knobble
- old stubs, and go with the new ABI.
-
- * Cross thread Object references
- + I think the way to fix this is by using a different
- interface->adaptor_type: ORBIT_ADAPTOR_POA_THREADED,
- such that the fast case will always drop through to
- small_invoke_stub_n, where we can get far more creative.
-
- * Threading
- + GIOPMessageQueueEntry needs to hold a cnx ref.
- + orb->current_invocations needs to be per-thread ...
- also, we should push a stack-data pointer.
- + Need to emit 'broken' connection - via the listen/unlisten
- stuff in the main thread ... [ and garentee the same
- invariants as previously ? cnx status etc. ? ]
-
- + Create a per-object policy 'PROCESS_REENTERANTLY', using our
- VPVID space; takes a boolean ... set it on the object ...
- [ make some libbonobo wrappers to improve the situation ]
- + CORBA_Object_non_existant - needs to do a blocking
- check for CONNECTED / DISCONNETED.
- + bin redundant forwards in poa.c
- + giop_recv_thread_fn - more work needed
- + ** ERROR **: Need to handle zapped cnx' async callbacks
-
-
- * User friendliness
- + tolerate NULL CORBA_Environments in stubs
- + 'sequence from GList' API.
- + always return initialized memory on exception
- + add an X like 'event' processing API for incoming bits (?)
-
- * GIOP fragments
- / + need to handle a cancel request in the middle of a fragment stream
-
- * It seems the local case optimization can go wrong when
- invoking bogus methods from a different interface on an Object ref.
- + this is to do with
- a) not checking the vepv offset we get
- b) not expanding the lookup of the vepv offset at all.
-
- * Thread safety
- + For independent clients, we need some way to
- arbitrate the giop_recv_buffer_get method - so
- that either: a single thread does the poll and the
- rest block, or we all poll.
-
- + apparently g_object_ref / unref are not thread safe
- we need linc_object_ref / unref instead that does
- a LINC_MUTEX_LOCK on the global object lifecycle lock
- that needs to move into linc ... sigh !
-
- + we need to ensure that linc does no signal emissions,
- since these are horribly slow and again not safe.
-
- * Optimization
- + we need 2 de-marshalling routines, 1 with (slow)
- byteswap and 1 without it, save scads and scads of
- branch cache misses; easy to do too; make it a virtual
- method on the recv buffer (?) [ for easy chaining ]
-
- + we need some concept of align == native align flagged
- on TypeCodes, so we can blat things quickly with memcpy
- in a generic way - eg. sequences of octets.
-
- + we need to implement 'wait for completion' on
- shutdown so that we can activate async unrefs in
- bonobo.
-
- * Dragons:
- + giop_recv_buffer.c (giop_connection_handle_input)
- manages to go through the error condition a whole
- load; _why_ is this ? - is it a recursive effect on
- the method ? why are we called if there is no data ?
-
- + We need a typecast in an _allocbuf which we know is
- aliased, eg. PortableServer_POAList_allocbuf, since
- it gets assigned to a CORBA_Object *, and the cast
- is bogus.