|Version 5 (modified by http://nedko.arnaudov.name/, 21 months ago)|
Discussion with Torben Hohn on restoring partial graphs:
Jul 18 17:53:10 nedko torbenh3: am i right that jack-session is not capable of restoring partial graphs? because with them client name uniqueness cannot be guaranteed and they are used even in session dirs Jul 18 17:53:43 nedko i'm analyzing jack-session in order to add support for it in ladish Jul 18 17:54:07 torbenh3 nedko: jack-session can restore partial graphs. Jul 18 14:54:43 nedko torbenh3: how can it if the to be reserved client name is already used? Jul 18 14:55:31 torbenh3 nedko: just reserve some other name ? Jul 18 14:57:17 torbenh3 nedko: the only limitation is, that you can not load 2 partial graphs at once. you need to load them sequentially. because the uids might conflict. Jul 18 14:58:16 nedko torbenh3: if the second load has conflicting uids, what i should do? generate new one, like with client names? Jul 18 14:58:46 nedko torbenh3: it makes no sense to me because apps have stored uids in their state... Jul 18 15:00:01 torbenh3 nedko: you can not change the uids. but the uids are only used to access a client name. after that, they are made unique in the graph. Jul 18 15:00:56 nedko torbenh3: made by jack or by session manager? Jul 18 15:01:21 torbenh3 nedko: by jack. Jul 18 15:01:52 torbenh3 jack_reserve_client_name( "nameA", 0 ); jack_client_open( UID = 0 ); jack_reserve_client_name( "nameB", 0 ); jack_client_open( UID=0 ); will work Jul 18 15:02:23 nedko torbenh3: thanks
Some random knowledge fetched on IRC:
- jack_session_notify is a blocking call and it is not possible to have more than one notify operation running simultaneously.
- notify operation that targets all clients will be executed by apps in parallel.
- if some app fails to send save event back, the whole notify operation will block forever. if the notify operation target were all clients, then there is no way to check what is the offending app.
- it is possible to detect offending clients by executing notify for each client in sequence. this way there is a way for user to know what is the offending client
- the way to cancel stalled notify operation is by stopping the app that created the misbehaving client
Some knowledge fetched from jack1 and jack2 source code:
- if client is opened with uid that matches the one of already existing client, the existing client uid is changed. In jack1 the function that ensures this is jack_ensure_uuid_unique() and the uid of the existing client is set to zero. In jack2 the function is JackEngine::EnsureUUID() and the existing uid of the existing client is set to a newly generated uid.