diff --git a/jack/internal.h b/jack/internal.h index cdd41ef..47973ce 100644 --- a/jack/internal.h +++ b/jack/internal.h @@ -259,6 +259,7 @@ typedef volatile struct { volatile jack_client_state_t state; /* w: engine and client r: engine */ volatile char name[JACK_CLIENT_NAME_SIZE]; volatile char session_command[JACK_PORT_NAME_SIZE]; + volatile jack_session_flags_t session_flags; volatile ClientType type; /* w: engine r: engine and client */ volatile int8_t active; /* w: engine r: engine and client */ volatile int8_t dead; /* r/w: engine */ diff --git a/jack/session.h b/jack/session.h index 8ae0414..6768dec 100644 --- a/jack/session.h +++ b/jack/session.h @@ -164,6 +164,7 @@ typedef struct { const char *uuid; const char *client_name; const char *command; + jack_session_flags_t flags; } jack_session_command_t; /** diff --git a/jackd/engine.c b/jackd/engine.c index 1a9f68d..961aee2 100644 --- a/jackd/engine.c +++ b/jackd/engine.c @@ -2644,6 +2644,14 @@ static int jack_send_session_reply ( jack_engine_t *engine, jack_client_internal engine->session_reply_fd, strerror (errno)); return -1; } + if (write (engine->session_reply_fd, & client->control->session_flags, + sizeof (client->control->session_flags)) + < (ssize_t) sizeof (client->control->session_flags)) { + jack_error ("cannot write SessionNotify result " + "to client via fd = %d (%s)", + engine->session_reply_fd, strerror (errno)); + return -1; + } return 0; } diff --git a/libjack/client.c b/libjack/client.c index 351228e..8b97272 100644 --- a/libjack/client.c +++ b/libjack/client.c @@ -1346,6 +1346,7 @@ jack_session_reply (jack_client_t *client, jack_session_event_t *event ) snprintf ((char *)client->control->session_command, sizeof(client->control->session_command), "%s", event->command_line); + client->control->session_flags = event->flags; free (event->command_line); } else { @@ -1382,6 +1383,8 @@ jack_session_commands_free (jack_session_command_t *cmds) free ((char *)cmds[i].uuid); else break; + + i += 1; } free(cmds); @@ -1449,6 +1452,12 @@ jack_session_notify (jack_client_t* client, const char *target, jack_session_eve " server (%s)", request.type, strerror (errno)); goto out; } + if (read (client->request_fd, & retval[num_replies-1].flags, sizeof(retval[num_replies-1].flags) ) + != sizeof(retval[num_replies-1].flags) ) { + jack_error ("cannot read result for request type %d from" + " server (%s)", request.type, strerror (errno)); + goto out; + } snprintf( (char *)retval[num_replies-1].uuid, 16, "%d", uid ); } free((char *)retval[num_replies-1].uuid);