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. |
---|