daemon: iterate studio graphs instead of app supervisors

The callback has both app supervisor and graph parameters.
The graph parameter is needed so virtualizer can know where to add clients/ports
This commit is contained in:
Nedko Arnaudov 2010-04-03 22:25:28 +03:00
parent 496f8712e2
commit 3e5b69c481
3 changed files with 15 additions and 9 deletions

View File

@ -511,6 +511,7 @@ static
bool
studio_on_child_exit_callback(
void * context,
ladish_graph_handle graph,
ladish_app_supervisor_handle app_supervisor)
{
child_exit_context_ptr->found = ladish_app_supervisor_child_exit(app_supervisor, child_exit_context_ptr->pid);
@ -528,7 +529,7 @@ void studio_on_child_exit(pid_t pid)
context.pid = pid;
context.found = false;
studio_iterate_app_supervisors(&context, studio_on_child_exit_callback);
studio_iterate_virtual_graphs(&context, studio_on_child_exit_callback);
if (!context.found)
{
@ -708,17 +709,19 @@ exit:
}
bool
studio_iterate_app_supervisors(
studio_iterate_virtual_graphs(
void * context,
bool (* callback)(
void * context,
ladish_graph_handle graph,
ladish_app_supervisor_handle app_supervisor))
{
struct list_head * node_ptr;
ladish_room_handle room;
ladish_app_supervisor_handle room_app_supervisor;
ladish_graph_handle room_graph;
if (!callback(context, g_studio.app_supervisor))
if (!callback(context, g_studio.studio_graph, g_studio.app_supervisor))
{
return false;
}
@ -728,8 +731,9 @@ studio_iterate_app_supervisors(
room = ladish_room_from_list_node(node_ptr);
room_app_supervisor = ladish_room_get_app_supervisor(room);
ASSERT(room_app_supervisor != NULL);
room_graph = ladish_room_get_graph(room);
if (!callback(context, room_app_supervisor))
if (!callback(context, room_graph, room_app_supervisor))
{
return false;
}
@ -738,7 +742,7 @@ studio_iterate_app_supervisors(
return true;
}
static bool studio_stop_app_supervisor(void * context, ladish_app_supervisor_handle app_supervisor)
static bool studio_stop_app_supervisor(void * context, ladish_graph_handle graph, ladish_app_supervisor_handle app_supervisor)
{
ladish_app_supervisor_stop(app_supervisor);
return true; /* iterate all supervisors */
@ -746,7 +750,7 @@ static bool studio_stop_app_supervisor(void * context, ladish_app_supervisor_han
void studio_stop_app_supervisors(void)
{
studio_iterate_app_supervisors(NULL, studio_stop_app_supervisor);
studio_iterate_virtual_graphs(NULL, studio_stop_app_supervisor);
}
void emit_studio_renamed()

View File

@ -28,6 +28,7 @@
#define STUDIO_H__0BEDE85E_4FB3_4D74_BC08_C373A22409C0__INCLUDED
#include "app_supervisor.h"
#include "graph.h"
bool studio_init(void);
void studio_uninit(void);
@ -40,10 +41,11 @@ bool studio_delete(void * call_ptr, const char * studio_name);
void studio_on_child_exit(pid_t pid);
bool
studio_iterate_app_supervisors(
studio_iterate_virtual_graphs(
void * context,
bool (* callback)(
void * context,
ladish_graph_handle graph,
ladish_app_supervisor_handle app_supervisor));
void studio_stop_app_supervisors(void);

View File

@ -61,7 +61,7 @@ struct app_find_context
#define app_find_context_ptr ((struct app_find_context *)context)
bool get_app_name_from_supervisor(void * context, ladish_app_supervisor_handle app_supervisor)
bool get_app_name_from_supervisor(void * context, ladish_graph_handle graph, ladish_app_supervisor_handle app_supervisor)
{
pid_t pid;
char * app_name;
@ -114,7 +114,7 @@ char * get_app_name(struct virtualizer * virtualizer_ptr, uint64_t client_id, pi
context.pid = (pid_t)pid;
context.app_name = NULL;
studio_iterate_app_supervisors(&context, get_app_name_from_supervisor);
studio_iterate_virtual_graphs(&context, get_app_name_from_supervisor);
if (context.app_name != NULL)
{