* aconnect patch
@ 2010-03-15 13:04 lieven moors
2010-03-15 14:32 ` Paul Menzel
0 siblings, 1 reply; 8+ messages in thread
From: lieven moors @ 2010-03-15 13:04 UTC (permalink / raw)
To: alsa-devel
Hi everybody,
I'm a musician working intensively with Linux, and I like
writing programs.
Now I am working on a little command line utility to store
and restore all ALSA (midi) and JACK connections to/from an xml
file, and I've been using aconnect as an example for writing
the ALSA part.
I also needed a function to remove all connections, similar
to the remove_connections function in aconnect.
After using aconnect -x for some time, I noticed that it didn't
work as it should. Very often a number of connections were
left untouched after issuing this command.
After digging a little bit deeper, I think I found the reason for
the bug, and wrote a fix for it.
This is what I think happens in remove_connections:
Every time the for loop is executed, the index of the
snd_seq_query_subscribe_t is updated (+ 1).
If the connection has the right capabilities, it is removed.
When the connection is removed, I think the index gets
reassigned, and the next connection gets the position at index 0.
The result is that when one connection is removed, the
removal of the next connection is skipped (because the for
loop updates the index every time).
In the patch, I only update the index when unsubscribing fails,
or if it is unwanted because the capabilities or wrong.
This seems to solve the problems I had with aconnect -x,
and now it disconnects all connections as it should.
In the original function, connections are removed both ways.
First all ports with SND_SEQ_PORT_CAP_SUBS_READ are
checked, and associated connections removed, and then all
ports with SND_SEQ_PORT_CAP_SUBS_WRITE.
In the patch, I removed the second part, because I think it is
doing the same thing twice.
Please let me know what you think about this patch,
and if you think my reasoning is sane...
Greetings,
Lieven Moors
diff --git a/aconnect.c b/aconnect.c
index 1a50666..6092748 100644
--- a/aconnect.c
+++ b/aconnect.c
@@ -192,52 +192,33 @@ static void remove_connection(snd_seq_t *seq,
snd_seq_client_info_t *cinfo,
snd_seq_port_info_t *pinfo, int count)
{
snd_seq_query_subscribe_t *query;
-
snd_seq_query_subscribe_alloca(&query);
snd_seq_query_subscribe_set_root(query,
snd_seq_port_info_get_addr(pinfo));
-
snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_READ);
snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1)) {
+
+ while (snd_seq_query_port_subscribers(seq, query) >= 0)
+ {
snd_seq_port_info_t *port;
snd_seq_port_subscribe_t *subs;
const snd_seq_addr_t *sender =
snd_seq_query_subscribe_get_root(query);
const snd_seq_addr_t *dest =
snd_seq_query_subscribe_get_addr(query);
snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, dest->client, dest->port,
port) < 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_SUBS_WRITE))
- continue;
- if (snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_NO_EXPORT)
- continue;
- snd_seq_port_subscribe_alloca(&subs);
- snd_seq_port_subscribe_set_queue(subs,
snd_seq_query_subscribe_get_queue(query));
- snd_seq_port_subscribe_set_sender(subs, sender);
- snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
- }
- snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_WRITE);
- snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1)) {
- snd_seq_port_info_t *port;
- snd_seq_port_subscribe_t *subs;
- const snd_seq_addr_t *dest =
snd_seq_query_subscribe_get_root(query);
- const snd_seq_addr_t *sender =
snd_seq_query_subscribe_get_addr(query);
- snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, sender->client,
sender->port, port) < 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_SUBS_READ))
- continue;
- if (snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_NO_EXPORT)
+ if ((snd_seq_get_any_port_info(seq, dest->client, dest->port,
port) < 0) ||
+ !(snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_SUBS_WRITE) ||
+ (snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_NO_EXPORT))
+ {
+ snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1);
continue;
+ }
snd_seq_port_subscribe_alloca(&subs);
snd_seq_port_subscribe_set_queue(subs,
snd_seq_query_subscribe_get_queue(query));
snd_seq_port_subscribe_set_sender(subs, sender);
snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
+ if(snd_seq_unsubscribe_port(seq, subs) < 0){
+ snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1);
+ }
}
}
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: aconnect patch
2010-03-15 13:04 aconnect patch lieven moors
@ 2010-03-15 14:32 ` Paul Menzel
2010-03-15 17:40 ` lieven moors
0 siblings, 1 reply; 8+ messages in thread
From: Paul Menzel @ 2010-03-15 14:32 UTC (permalink / raw)
To: alsa-devel
[-- Attachment #1.1: Type: text/plain, Size: 1067 bytes --]
Dear lieven,
Am Montag, den 15.03.2010, 14:04 +0100 schrieb lieven moors:
[…]
> Please let me know what you think about this patch, and if you think my reasoning is sane...
thank you for your work. Unfortunately your MUA mangled the output.
Could you please resend without linebreaks.
It looks like you used `git format-patch` already. Great! You can also
use `git send-email` if you plan on submitting more patches [1].
Anyway, could you also add a `Signed-off-by` line (`git commit -s` or
`git format-patch -s`) and add a more descriptive summary as `aconnect
-x: Do not update index after removal of connection.`. (This is just
taken form your summary.)
Please make sure when resending to not this by »[PATCH v2]« in front of
your subject line, e. g. `git format-patch --subject-prefix="Patch v2"`
(see `git help format-patch`).
Thanks again and sorry for the long response,
Paul
[1] http://git.wiki.kernel.org/index.php/GitTips#Using_gmail_to_send_your_patches
[2] http://elinux.org/Git_usage#Sending_with_Gmail
[-- Attachment #1.2: Dies ist ein digital signierter Nachrichtenteil --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: aconnect patch
2010-03-15 14:32 ` Paul Menzel
@ 2010-03-15 17:40 ` lieven moors
2010-03-15 20:47 ` [Patch v2] aconnect -x: Do not update index after removal of connection Paul Menzel
0 siblings, 1 reply; 8+ messages in thread
From: lieven moors @ 2010-03-15 17:40 UTC (permalink / raw)
To: alsa-devel
On 03/15/2010 03:32 PM, Paul Menzel wrote:
> Dear lieven,
>
>
> Am Montag, den 15.03.2010, 14:04 +0100 schrieb lieven moors:
>
> […]
>
>
>> Please let me know what you think about this patch, and if you think my reasoning is sane...
>>
> thank you for your work. Unfortunately your MUA mangled the output.
> Could you please resend without linebreaks.
>
> It looks like you used `git format-patch` already. Great! You can also
> use `git send-email` if you plan on submitting more patches [1].
>
> Anyway, could you also add a `Signed-off-by` line (`git commit -s` or
> `git format-patch -s`) and add a more descriptive summary as `aconnect
> -x: Do not update index after removal of connection.`. (This is just
> taken form your summary.)
>
> Please make sure when resending to not this by »[PATCH v2]« in front of
> your subject line, e. g. `git format-patch --subject-prefix="Patch v2"`
> (see `git help format-patch`).
>
>
> Thanks again and sorry for the long response,
>
> Paul
>
>
> [1] http://git.wiki.kernel.org/index.php/GitTips#Using_gmail_to_send_your_patches
> [2] http://elinux.org/Git_usage#Sending_with_Gmail
>
>
>
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
Thanks for the explanation, here is a second try...
I'm not sure what caused the extra line breaks, but this should be plain
text now.
Hope this works...
From 996cf123d20dc5d7db2f98f29cebcfb7d3b013e0 Mon Sep 17 00:00:00 2001
From: lieven moors <lievenmoors@gmail.com>
Date: Mon, 15 Mar 2010 18:13:11 +0100
Subject: [Patch v2] aconnect -x: Do not update index after removal of
connection.
Signed-off-by: lieven moors <lievenmoors@gmail.com>
---
seq/aconnect/aconnect.c | 43 ++++++++++++-------------------------------
1 files changed, 12 insertions(+), 31 deletions(-)
diff --git a/seq/aconnect/aconnect.c b/seq/aconnect/aconnect.c
index 1a50666..6092748 100644
--- a/seq/aconnect/aconnect.c
+++ b/seq/aconnect/aconnect.c
@@ -192,52 +192,33 @@ static void remove_connection(snd_seq_t *seq,
snd_seq_client_info_t *cinfo,
snd_seq_port_info_t *pinfo, int count)
{
snd_seq_query_subscribe_t *query;
-
snd_seq_query_subscribe_alloca(&query);
snd_seq_query_subscribe_set_root(query, snd_seq_port_info_get_addr(pinfo));
-
snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_READ);
snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1)) {
+
+ while (snd_seq_query_port_subscribers(seq, query) >= 0)
+ {
snd_seq_port_info_t *port;
snd_seq_port_subscribe_t *subs;
const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_root(query);
const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_addr(query);
snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, dest->client, dest->port, port) < 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_SUBS_WRITE))
- continue;
- if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
- continue;
- snd_seq_port_subscribe_alloca(&subs);
- snd_seq_port_subscribe_set_queue(subs,
snd_seq_query_subscribe_get_queue(query));
- snd_seq_port_subscribe_set_sender(subs, sender);
- snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
- }
- snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_WRITE);
- snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1)) {
- snd_seq_port_info_t *port;
- snd_seq_port_subscribe_t *subs;
- const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_root(query);
- const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_addr(query);
- snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, sender->client, sender->port, port)
< 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) &
SND_SEQ_PORT_CAP_SUBS_READ))
- continue;
- if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
+ if ((snd_seq_get_any_port_info(seq, dest->client, dest->port, port) <
0) ||
+ !(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_WRITE) ||
+ (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT))
+ {
+ snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1);
continue;
+ }
snd_seq_port_subscribe_alloca(&subs);
snd_seq_port_subscribe_set_queue(subs,
snd_seq_query_subscribe_get_queue(query));
snd_seq_port_subscribe_set_sender(subs, sender);
snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
+ if(snd_seq_unsubscribe_port(seq, subs) < 0){
+ snd_seq_query_subscribe_set_index(query,
snd_seq_query_subscribe_get_index(query) + 1);
+ }
}
}
--
1.6.3.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Patch v2] aconnect -x: Do not update index after removal of connection.
2010-03-15 17:40 ` lieven moors
@ 2010-03-15 20:47 ` Paul Menzel
2010-03-15 22:30 ` lieven moors
0 siblings, 1 reply; 8+ messages in thread
From: Paul Menzel @ 2010-03-15 20:47 UTC (permalink / raw)
To: alsa-devel
[-- Attachment #1.1: Type: text/plain, Size: 376 bytes --]
Am Montag, den 15.03.2010, 18:40 +0100 schrieb lieven moors:
> On 03/15/2010 03:32 PM, Paul Menzel wrote:
[…]
> Thanks for the explanation, here is a second try...
> I'm not sure what caused the extra line breaks, but this should be plain
> text now.
> Hope this works...
Unfortunately I did not. Could you just attach the patch, please?
Thanks,
Paul
[-- Attachment #1.2: Dies ist ein digital signierter Nachrichtenteil --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Patch v2] aconnect -x: Do not update index after removal of connection.
2010-03-15 20:47 ` [Patch v2] aconnect -x: Do not update index after removal of connection Paul Menzel
@ 2010-03-15 22:30 ` lieven moors
2010-03-24 15:32 ` lieven moors
0 siblings, 1 reply; 8+ messages in thread
From: lieven moors @ 2010-03-15 22:30 UTC (permalink / raw)
To: alsa-devel
[-- Attachment #1: Type: text/plain, Size: 671 bytes --]
On 03/15/2010 09:47 PM, Paul Menzel wrote:
> Am Montag, den 15.03.2010, 18:40 +0100 schrieb lieven moors:
>
>> On 03/15/2010 03:32 PM, Paul Menzel wrote:
>>
> […]
>
>
>> Thanks for the explanation, here is a second try...
>> I'm not sure what caused the extra line breaks, but this should be plain
>> text now.
>> Hope this works...
>>
> Unfortunately I did not. Could you just attach the patch, please?
>
>
> Thanks,
>
> Paul
>
>
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
Ok, done.
[-- Attachment #2: 0001-aconnect-x-Do-not-update-index-after-removal-of-conn.patch --]
[-- Type: text/x-patch, Size: 3578 bytes --]
>From 996cf123d20dc5d7db2f98f29cebcfb7d3b013e0 Mon Sep 17 00:00:00 2001
From: lieven moors <lievenmoors@gmail.com>
Date: Mon, 15 Mar 2010 18:13:11 +0100
Subject: [Patch v2] aconnect -x: Do not update index after removal of connection.
Signed-off-by: lieven moors <lievenmoors@gmail.com>
---
seq/aconnect/aconnect.c | 43 ++++++++++++-------------------------------
1 files changed, 12 insertions(+), 31 deletions(-)
diff --git a/seq/aconnect/aconnect.c b/seq/aconnect/aconnect.c
index 1a50666..6092748 100644
--- a/seq/aconnect/aconnect.c
+++ b/seq/aconnect/aconnect.c
@@ -192,52 +192,33 @@ static void remove_connection(snd_seq_t *seq, snd_seq_client_info_t *cinfo,
snd_seq_port_info_t *pinfo, int count)
{
snd_seq_query_subscribe_t *query;
-
snd_seq_query_subscribe_alloca(&query);
snd_seq_query_subscribe_set_root(query, snd_seq_port_info_get_addr(pinfo));
-
snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_READ);
snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1)) {
+
+ while (snd_seq_query_port_subscribers(seq, query) >= 0)
+ {
snd_seq_port_info_t *port;
snd_seq_port_subscribe_t *subs;
const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_root(query);
const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_addr(query);
snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, dest->client, dest->port, port) < 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_WRITE))
- continue;
- if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
- continue;
- snd_seq_port_subscribe_alloca(&subs);
- snd_seq_port_subscribe_set_queue(subs, snd_seq_query_subscribe_get_queue(query));
- snd_seq_port_subscribe_set_sender(subs, sender);
- snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
- }
- snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_WRITE);
- snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1)) {
- snd_seq_port_info_t *port;
- snd_seq_port_subscribe_t *subs;
- const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_root(query);
- const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_addr(query);
- snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, sender->client, sender->port, port) < 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_READ))
- continue;
- if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
+ if ((snd_seq_get_any_port_info(seq, dest->client, dest->port, port) < 0) ||
+ !(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_WRITE) ||
+ (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT))
+ {
+ snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1);
continue;
+ }
snd_seq_port_subscribe_alloca(&subs);
snd_seq_port_subscribe_set_queue(subs, snd_seq_query_subscribe_get_queue(query));
snd_seq_port_subscribe_set_sender(subs, sender);
snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
+ if(snd_seq_unsubscribe_port(seq, subs) < 0){
+ snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1);
+ }
}
}
--
1.6.3.3
[-- Attachment #3: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Patch v2] aconnect -x: Do not update index after removal of connection.
2010-03-15 22:30 ` lieven moors
@ 2010-03-24 15:32 ` lieven moors
2010-03-25 10:05 ` Paul Menzel
0 siblings, 1 reply; 8+ messages in thread
From: lieven moors @ 2010-03-24 15:32 UTC (permalink / raw)
To: alsa-devel
On 03/15/2010 11:30 PM, lieven moors wrote:
> On 03/15/2010 09:47 PM, Paul Menzel wrote:
>> Am Montag, den 15.03.2010, 18:40 +0100 schrieb lieven moors:
>>
>>> On 03/15/2010 03:32 PM, Paul Menzel wrote:
>>>
>> […]
>>
>>
>>> Thanks for the explanation, here is a second try...
>>> I'm not sure what caused the extra line breaks, but this should be plain
>>> text now.
>>> Hope this works...
>>>
>> Unfortunately I did not. Could you just attach the patch, please?
>>
>>
>> Thanks,
>>
>> Paul
>>
>>
>>
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel@alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>>
> Ok, done.
Hi Paul,
Did you get my patch in the end?
Greetings,
Lieven
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Patch v2] aconnect -x: Do not update index after removal of connection.
2010-03-24 15:32 ` lieven moors
@ 2010-03-25 10:05 ` Paul Menzel
2010-03-25 11:23 ` Takashi Iwai
0 siblings, 1 reply; 8+ messages in thread
From: Paul Menzel @ 2010-03-25 10:05 UTC (permalink / raw)
To: alsa-devel; +Cc: Takashi Iwai
[-- Attachment #1.1.1: Type: text/plain, Size: 420 bytes --]
Dear Lieven,
sorry for my late reply. I was offline.
Am Mittwoch, den 24.03.2010, 16:32 +0100 schrieb lieven moors:
[…]
> Did you get my patch in the end?
yes I did. But it looks like it did not make it to the list.
Takashi, could you please review and apply the attached patch. According
to [1] you seem to be the author.
Thanks,
Paul
[1] http://alsa.opensrc.org/index.php/Aconnect
[-- Attachment #1.1.2: 0001-aconnect-x-Do-not-update-index-after-removal-of-conn.patch --]
[-- Type: text/x-patch, Size: 3660 bytes --]
>From 996cf123d20dc5d7db2f98f29cebcfb7d3b013e0 Mon Sep 17 00:00:00 2001
From: lieven moors <lievenmoors@gmail.com>
Date: Mon, 15 Mar 2010 18:13:11 +0100
Subject: [Patch v2] aconnect -x: Do not update index after removal of connection.
Signed-off-by: lieven moors <lievenmoors@gmail.com>
---
seq/aconnect/aconnect.c | 43 ++++++++++++-------------------------------
1 files changed, 12 insertions(+), 31 deletions(-)
diff --git a/seq/aconnect/aconnect.c b/seq/aconnect/aconnect.c
index 1a50666..6092748 100644
--- a/seq/aconnect/aconnect.c
+++ b/seq/aconnect/aconnect.c
@@ -192,52 +192,33 @@ static void remove_connection(snd_seq_t *seq, snd_seq_client_info_t *cinfo,
snd_seq_port_info_t *pinfo, int count)
{
snd_seq_query_subscribe_t *query;
-
snd_seq_query_subscribe_alloca(&query);
snd_seq_query_subscribe_set_root(query, snd_seq_port_info_get_addr(pinfo));
-
snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_READ);
snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1)) {
+
+ while (snd_seq_query_port_subscribers(seq, query) >= 0)
+ {
snd_seq_port_info_t *port;
snd_seq_port_subscribe_t *subs;
const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_root(query);
const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_addr(query);
snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, dest->client, dest->port, port) < 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_WRITE))
- continue;
- if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
- continue;
- snd_seq_port_subscribe_alloca(&subs);
- snd_seq_port_subscribe_set_queue(subs, snd_seq_query_subscribe_get_queue(query));
- snd_seq_port_subscribe_set_sender(subs, sender);
- snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
- }
- snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_WRITE);
- snd_seq_query_subscribe_set_index(query, 0);
- for (; snd_seq_query_port_subscribers(seq, query) >= 0;
- snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1)) {
- snd_seq_port_info_t *port;
- snd_seq_port_subscribe_t *subs;
- const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_root(query);
- const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_addr(query);
- snd_seq_port_info_alloca(&port);
- if (snd_seq_get_any_port_info(seq, sender->client, sender->port, port) < 0)
- continue;
- if (!(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_READ))
- continue;
- if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
+ if ((snd_seq_get_any_port_info(seq, dest->client, dest->port, port) < 0) ||
+ !(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_WRITE) ||
+ (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT))
+ {
+ snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1);
continue;
+ }
snd_seq_port_subscribe_alloca(&subs);
snd_seq_port_subscribe_set_queue(subs, snd_seq_query_subscribe_get_queue(query));
snd_seq_port_subscribe_set_sender(subs, sender);
snd_seq_port_subscribe_set_dest(subs, dest);
- snd_seq_unsubscribe_port(seq, subs);
+ if(snd_seq_unsubscribe_port(seq, subs) < 0){
+ snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1);
+ }
}
}
--
1.6.3.3
[-- Attachment #1.2: Dies ist ein digital signierter Nachrichtenteil --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Patch v2] aconnect -x: Do not update index after removal of connection.
2010-03-25 10:05 ` Paul Menzel
@ 2010-03-25 11:23 ` Takashi Iwai
0 siblings, 0 replies; 8+ messages in thread
From: Takashi Iwai @ 2010-03-25 11:23 UTC (permalink / raw)
To: Paul Menzel; +Cc: alsa-devel
At Thu, 25 Mar 2010 11:05:55 +0100,
Paul Menzel wrote:
>
> Dear Lieven,
>
>
> sorry for my late reply. I was offline.
>
> Am Mittwoch, den 24.03.2010, 16:32 +0100 schrieb lieven moors:
>
> […]
>
> > Did you get my patch in the end?
>
> yes I did. But it looks like it did not make it to the list.
>
> Takashi, could you please review and apply the attached patch. According
> to [1] you seem to be the author.
Thanks! I applied it with minor coding-style fixes.
Takashi
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-03-25 11:23 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-15 13:04 aconnect patch lieven moors
2010-03-15 14:32 ` Paul Menzel
2010-03-15 17:40 ` lieven moors
2010-03-15 20:47 ` [Patch v2] aconnect -x: Do not update index after removal of connection Paul Menzel
2010-03-15 22:30 ` lieven moors
2010-03-24 15:32 ` lieven moors
2010-03-25 10:05 ` Paul Menzel
2010-03-25 11:23 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).