* rename cdbus header include guards to use CDBUS_ instead of LASH_DBUS_
* remove dbus/error.h and dbus/error.c
error.h contained lash/ladish specific error strings and
lash_dbus_error() prototype. lash_dbus_error() is renamed to
cdbus_error() and its implementation is moved to dbus/method.c. The
D-Bus error strings that have DBUS_ERROR_XXX matches are removed and
their uses are switched to the libdbus variants. The ladish specific
error strings are moved to dbus_constants.h
The use of uninitalized member was caused by the recent revert.
The ladish_room::object_path member is not actually used only for room
template objects.
This reverts commit 9bf795905f.
ladish_room_create_interal() is suposed to allocate the struct and
initialize the name and uuid members. The template member is supposed to
be initialized by the caller functions, either ladish_room_create() or
ladish_room_create_template(). The siblings member is initialized
later, when the room is actually added to the appropriate list.
The graph member is used by both room templates and room objects. This
will be fixed in the following commit.
All other ladish_room members are not valid for room template objects.
ATM ladish_graph_copy() is always copied without skipping hidden elements.
skip_hidden mechanism must be replaced with filtering in callbacks,
because it is tricky and because app filtering does not belong to
generic graph object.
This is a workaround (that was implemented before too). The proper way of handling this is to
create 'unnamed project' when a connection or app is added to the room.
The project state now is can now have more than one state. The project
unload sequence now first removes all connections, then stopps all
apps, and as last step - clears the graph. When project load fails,
ladish_room_unload_project() is not called anymore, because unloading
of room even without apps is now a multistep process. Instead, a new
function, ladish_room_clear_project(), is introduced. It is called
when project load fails and as last step in project unload.
For studio saves, save only studio vgraph a2j ports.
For room project saves, save only room vgraph a2j ports.
If there is not a2j ports for the vgraph being saved, an empty a2j client will not be saved anymore
* Helper functions in daemon/save.c will be used in project save functionality as well
* Graph iteration callbacks now receive the handle of the graph being iterated
* Indention is now more flexible because now it is not string but an integer
* Room creation/destruction is now separeted from starting/stopping
(creating/destroying jmcore links)
* Rooms can now be created and destryed when studio is stopped
* Rooms are started/stopped when studio is started/stopped
Apart from better interraction of studio start/stop and room
lifecycles, it is now possible to implement load of studio with rooms
because during studio load rooms have to be created in stopped state
and eventually started only at later stage, during studio start.
There are three types of ports depeneding on references to them:
* ports that are referenced from jack and studio graphs
* ports that are referenced from jack and room graphs
* studio-room link ports that are referenced from studio and room graphs
The old approach was to destroy ports when removing references from jack graph.
Studio-room link ports were destroyed when removing the room.
However this caused double free when removing app ports that appear in jack and
room graphs.
The introduced implementation uses reference counting of graph references to ports.
Temporary references (like the one returned by port constructor and graph_get_port())
are not tracked.