home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / liborbit2 / TODO < prev   
Encoding:
Text File  |  2003-06-24  |  3.1 KB  |  84 lines

  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.