source: trunk/third/ORBit2/TODO @ 20753

Revision 20753, 3.1 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20752, which included commits to RCS files with non-trunk default branches.
Line 
1TODO:
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.
Note: See TracBrowser for help on using the repository browser.