GstObject
---------

The base class for the entire GStreamer hierarchy is the GstObject.

Parentage
~~~~~~~~~

A pointer is available to store the current parent of the object.  This is one
of the two fundamental requirements for a hierarchical system such as GStreamer
(for the other, read up on GstBin).  Three functions are provided:
_set_parent(), _get_parent(), and _unparent().  The third is required because
there is an explicit check in _set_parent(): an object must not already have a
parent if you wish to set one.  You must unparent the object first.  This
allows for new additions later.

- GstObject's that can be parented:
  GstElement (inside a bin)
  GstPad (inside an element)


Naming
~~~~~~

- names of objects cannot be changed when they are parented 
- names of objects should be unique across parent
- set_name() can fail because of this
- as can gst_element_add_pad()/gst_bin_add_element()
- gst_object_set_name() only changes the object's name

- objects also have a name_prefix that is used to prefix the object name
  during debugging and identification
- there are object-specific set_name's() which also set the name_prefix
  on the object.  This is useful for debugging purposes to give the object
  a more identifiable name.  Typically a parent will call _set_name_prefix
  on children, taking a lock on them to do so.


Locking
~~~~~~~

The GstObject contains the necessary primitives to lock the object in a
thread-safe manner.  This will be used to provide general thread-safety as
needed.  However, this lock is generic, i.e. it covers the whole object.

The object LOCK is a very lowlevel lock that should only be held to access
the object properties for short periods of code.

All members of the GstObject structure marked as
/*< public >*/ /* with LOCK */
are protected by this lock.  These members can only be accessed for reading
or writing while the lock is held. All members should be copied or reffed
if they are used after releasing the LOCK.

Note that this does *not* mean that no other thread can modify the object at
the same time that the lock is held.  It only means that any two sections of
code that obey the lock are guaranteed to not be running simultaneously.  "The
lock is voluntary and cooperative".

This lock will ideally be used for parentage, flags and naming, which is
reasonable, since they are the only possible things to protect in the
GstObject.


Locking order
~~~~~~~~~~~~~

In parent-child situations the lock of the parent must always be taken first
before taking the lock of the child. It is NOT allowed to hold the child
lock before taking the parent lock.

This policy allows for parents to iterate their children and setting properties
on them.

Whenever a nested lock needs to be taken on objects not involved in a 
parent-child relation (eg. pads), an explictic locking order has to be defined.


Path Generation
~~~~~~~~~~~~~~~

Due to the base nature of the GstObject, it becomes the only reasonable place
to put this particular function (_get_path_string).  It will generate a string
describing the parent hierarchy of a given GstObject.  


Flags
~~~~~

Each object in the GStreamer object hierarchy can have flags associated with it,
which are used to describe a state or a feature of the object.
