| 1 | TODO:
|
|---|
| 2 |
|
|---|
| 3 | * Ensure that we can have our 'non-threaded' thread be any thread.
|
|---|
| 4 |
|
|---|
| 5 | * Turn off the global 'fast_calls' variable, to knobble
|
|---|
| 6 | old stubs, and go with the new ABI.
|
|---|
| 7 |
|
|---|
| 8 | * Cross thread Object references
|
|---|
| 9 | + I think the way to fix this is by using a different
|
|---|
| 10 | interface->adaptor_type: ORBIT_ADAPTOR_POA_THREADED,
|
|---|
| 11 | such that the fast case will always drop through to
|
|---|
| 12 | small_invoke_stub_n, where we can get far more creative.
|
|---|
| 13 |
|
|---|
| 14 | * Threading
|
|---|
| 15 | + GIOPMessageQueueEntry needs to hold a cnx ref.
|
|---|
| 16 | + orb->current_invocations needs to be per-thread ...
|
|---|
| 17 | also, we should push a stack-data pointer.
|
|---|
| 18 | + Need to emit 'broken' connection - via the listen/unlisten
|
|---|
| 19 | stuff in the main thread ... [ and garentee the same
|
|---|
| 20 | invariants as previously ? cnx status etc. ? ]
|
|---|
| 21 |
|
|---|
| 22 | + Create a per-object policy 'PROCESS_REENTERANTLY', using our
|
|---|
| 23 | VPVID space; takes a boolean ... set it on the object ...
|
|---|
| 24 | [ make some libbonobo wrappers to improve the situation ]
|
|---|
| 25 | + CORBA_Object_non_existant - needs to do a blocking
|
|---|
| 26 | check for CONNECTED / DISCONNETED.
|
|---|
| 27 | + bin redundant forwards in poa.c
|
|---|
| 28 | + giop_recv_thread_fn - more work needed
|
|---|
| 29 | + ** ERROR **: Need to handle zapped cnx' async callbacks
|
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 | * User friendliness
|
|---|
| 33 | + tolerate NULL CORBA_Environments in stubs
|
|---|
| 34 | + 'sequence from GList' API.
|
|---|
| 35 | + always return initialized memory on exception
|
|---|
| 36 | + add an X like 'event' processing API for incoming bits (?)
|
|---|
| 37 |
|
|---|
| 38 | * GIOP fragments
|
|---|
| 39 | / + need to handle a cancel request in the middle of a fragment stream
|
|---|
| 40 |
|
|---|
| 41 | * It seems the local case optimization can go wrong when
|
|---|
| 42 | invoking bogus methods from a different interface on an Object ref.
|
|---|
| 43 | + this is to do with
|
|---|
| 44 | a) not checking the vepv offset we get
|
|---|
| 45 | b) not expanding the lookup of the vepv offset at all.
|
|---|
| 46 |
|
|---|
| 47 | * Thread safety
|
|---|
| 48 | + For independent clients, we need some way to
|
|---|
| 49 | arbitrate the giop_recv_buffer_get method - so
|
|---|
| 50 | that either: a single thread does the poll and the
|
|---|
| 51 | rest block, or we all poll.
|
|---|
| 52 |
|
|---|
| 53 | + apparently g_object_ref / unref are not thread safe
|
|---|
| 54 | we need linc_object_ref / unref instead that does
|
|---|
| 55 | a LINC_MUTEX_LOCK on the global object lifecycle lock
|
|---|
| 56 | that needs to move into linc ... sigh !
|
|---|
| 57 |
|
|---|
| 58 | + we need to ensure that linc does no signal emissions,
|
|---|
| 59 | since these are horribly slow and again not safe.
|
|---|
| 60 |
|
|---|
| 61 | * Optimization
|
|---|
| 62 | + we need 2 de-marshalling routines, 1 with (slow)
|
|---|
| 63 | byteswap and 1 without it, save scads and scads of
|
|---|
| 64 | branch cache misses; easy to do too; make it a virtual
|
|---|
| 65 | method on the recv buffer (?) [ for easy chaining ]
|
|---|
| 66 |
|
|---|
| 67 | + we need some concept of align == native align flagged
|
|---|
| 68 | on TypeCodes, so we can blat things quickly with memcpy
|
|---|
| 69 | in a generic way - eg. sequences of octets.
|
|---|
| 70 |
|
|---|
| 71 | + we need to implement 'wait for completion' on
|
|---|
| 72 | shutdown so that we can activate async unrefs in
|
|---|
| 73 | bonobo.
|
|---|
| 74 |
|
|---|
| 75 | * Dragons:
|
|---|
| 76 | + giop_recv_buffer.c (giop_connection_handle_input)
|
|---|
| 77 | manages to go through the error condition a whole
|
|---|
| 78 | load; _why_ is this ? - is it a recursive effect on
|
|---|
| 79 | the method ? why are we called if there is no data ?
|
|---|
| 80 |
|
|---|
| 81 | + We need a typecast in an _allocbuf which we know is
|
|---|
| 82 | aliased, eg. PortableServer_POAList_allocbuf, since
|
|---|
| 83 | it gets assigned to a CORBA_Object *, and the cast
|
|---|
| 84 | is bogus.
|
|---|