TODO:

* Threading 
	ST mode: - push all into the main thread ...
	Otherwise: queue per thread: 'RecvBuffer, pobj', etc.
		All types: POA, Obj, Connection need a queue
	=> bin that for now; setup the 'Request' type, impl. THREAD_PER_OBJECT.


* User friendliness
	+ 'sequence from GList' API.
	+ tolerate NULL CORBA_Environments in stubs
	+ always return initialized memory on exception
	+ add an X like 'event' processing API for incoming bits (?)

* linc/ORBit2 tmpdir issue for Unix sockets, test.sh must not
  rm -Rf /tmp/foo

* GIOP fragments
	+ need to handle a cancel request in the middle of a fragment stream

* It seems the local case optimization can go wrong when
  invoking bogus methods from a different interface on an Object ref.
	+ this is to do with
		a) not checking the vepv offset we get
		b) not expanding the lookup of the vepv offset at all.

* Thread safety
	+ For independent clients, we need some way to
	  arbitrate the giop_recv_buffer_get method - so
	  that either: a single thread does the poll and the
	  rest block, or we all poll.

	+ apparently g_object_ref / unref are not thread safe
	  we need linc_object_ref / unref instead that does
	  a LINC_MUTEX_LOCK on the global object lifecycle lock
	  that needs to move into linc ... sigh !

	+ we need to ensure that linc does no signal emissions,
	  since these are horribly slow and again not safe.

* Optimization
	+ we need 2 de-marshalling routines, 1 with (slow)
	  byteswap and 1 without it, save scads and scads of
	  branch cache misses; easy to do too; make it a virtual
	  method on the recv buffer (?) [ for easy chaining ]

	+ we need some concept of align == native align flagged
	  on TypeCodes, so we can blat things quickly with memcpy
	  in a generic way - eg. sequences of octets.

	+ we need to implement 'wait for completion' on
	  shutdown so that we can activate async unrefs in
	  bonobo.

* Dragons:
	+ giop_recv_buffer.c (giop_connection_handle_input)
	  manages to go through the error condition a whole
	  load; _why_ is this ? - is it a recursive effect on
	  the method ? why are we called if there is no data ?

	+ We need a typecast in an _allocbuf which we know is
	  aliased, eg. PortableServer_POAList_allocbuf, since
	  it gets assigned to a CORBA_Object *, and the cast
	  is bogus.