Edges are meant to abstract away the details of connecting two nodes. This patch set implements edges to an extent that makes it possible to greatly simplify the fallback code for setting the initial routing for streams in node.c. The initial routing of streams is now fully based on the new routing infrastructure. When a stream is created, an edge is created between the stream node and the sink/source/port node. Currently moving a stream deletes the original edge, but doesn't create a new one to reflect the new routing. I will work on that next. Tanu Kaskinen (15): core: Free pa_core.nodes when freeing pa_core node: Replace a state enum with an unlinked flag node: Set the unlinked flag earlier in pa_node_unlink() node: Fix unsafe pa_idxset_remove_by_index() call protocol-native: Protect stream unlinking against recursion sink-input, source-output: Protect unlinking against recursion sink-input, source-output: Don't do anything when killing unlinked streams core, edge: Add a basic pa_edge implementation node: Delete edges when unlinking a node node: Delete edges when deactivating a node sink-input, source-output: Delete edge when detaching a stream edge: Add support for connecting new streams node: Create edges for new streams edge: Refuse to connect inactive nodes experimental-router: Create edges for new streams src/Makefile.am | 2 +- src/modules/module-experimental-router.c | 67 +++--- src/pulsecore/core.c | 77 +++++++ src/pulsecore/core.h | 12 +- src/pulsecore/edge.c | 345 +++++++++++++++++++++++++++++++ src/pulsecore/edge.h | 25 +++ src/pulsecore/node.c | 253 ++++++++--------------- src/pulsecore/node.h | 15 +- src/pulsecore/protocol-native.c | 16 +- src/pulsecore/sink-input.c | 46 ++++- src/pulsecore/source-output.c | 42 +++- 11 files changed, 652 insertions(+), 248 deletions(-) create mode 100644 src/pulsecore/edge.c -- 1.8.3.1