source: trunk/ORBit2-2.14.0/TODO@ 202

Last change on this file since 202 was 92, checked in by cinc, 19 years ago

Orbit2 modified for use with NOM

File size: 3.1 KB
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.