<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.audio.pulseaudio.general">
    <title>gmane.comp.audio.pulseaudio.general</title>
    <link>http://blog.gmane.org/gmane.comp.audio.pulseaudio.general</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13310"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13309"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13308"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13307"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13306"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13305"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13304"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13303"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13302"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13301"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13300"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13299"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13298"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13297"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13296"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13295"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13294"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13293"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13292"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13291"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13310">
    <title>Re: Is it OK for PulseAudio to crashwhenBlueZ is buggy?</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13310</link>
    <description>&lt;pre&gt;
Thanks for the information. I had the assumption[1] that the device
addresses should be unique, but if they're not, the code that I've
written is certainly broken.

[1] I tried to verify my assumption first by asking on the #bluez irc
channel, and after getting no responses, I checked the bluetoothd code
and it seemed like the addresses would be guaranteed to be unique. The
device objects were put in a map with the address as the key, so there
could be no duplicates, but I guess I missed the fact that there are
multiple of those maps, one for each adapter.

&lt;/pre&gt;</description>
    <dc:creator>Tanu Kaskinen</dc:creator>
    <dc:date>2012-05-23T13:11:33</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13309">
    <title>Re: [RFC v0 0/5] Multiple Bluetooth SCOconnections</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13309</link>
    <description>&lt;pre&gt;Hi Mikel,

On Wed, Apr 11, 2012 at 10:00 AM, Mikel Astiz &amp;lt;mikel.astiz.oss&amp;lt; at &amp;gt;gmail.com&amp;gt; wrote:

Patches 1-3 I can ack, but the changes to MTU we need to investigate a
bit better what is going on, so I would leave them out for now.

&lt;/pre&gt;</description>
    <dc:creator>Luiz Augusto von Dentz</dc:creator>
    <dc:date>2012-05-23T09:55:30</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13308">
    <title>Re: [PATCH] bluetooth: Let PulseAudio always handle the transition to SINK_STATE_PLAYING.</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13308</link>
    <description>&lt;pre&gt;Hi Jarkko,

On Thu, Apr 19, 2012 at 3:52 PM, Jarkko Suontausta
&amp;lt;jarkko.suontausta&amp;lt; at &amp;gt;digia.com&amp;gt; wrote:

I don't get what exactly is wrong here, if it is playing we should not
do anything, perhaps this is a problem with the frequency being
different when the headset is the initiator. Btw, do you have any logs
about this problem?


&lt;/pre&gt;</description>
    <dc:creator>Luiz Augusto von Dentz</dc:creator>
    <dc:date>2012-05-23T09:39:34</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13307">
    <title>Re: [PATCH] Add profile argument tomodule-bluetooth-discover</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13307</link>
    <description>&lt;pre&gt;Hi Jess,

On Sat, Apr 21, 2012 at 12:23 AM, Jess Haas &amp;lt;pa&amp;lt; at &amp;gt;jesshaas.com&amp;gt; wrote:

I guess we need the policy module to handle this case, the policy
should be if there is no voice/call default A2DP otherwise HFP should
be used.

&lt;/pre&gt;</description>
    <dc:creator>Luiz Augusto von Dentz</dc:creator>
    <dc:date>2012-05-23T09:24:06</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13306">
    <title>Re: Is it OK for PulseAudio to crash when BlueZ is buggy?</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13306</link>
    <description>&lt;pre&gt;Hi Tanu,

On Wed, May 9, 2012 at 8:26 PM, Tanu Kaskinen &amp;lt;tanuk&amp;lt; at &amp;gt;iki.fi&amp;gt; wrote:

Btw, are you sure this is a problem? We can have the same address in
different devices if they are paired with different adapters,
otherwise it is a bug and we should be able to fix it.


&lt;/pre&gt;</description>
    <dc:creator>Luiz Augusto von Dentz</dc:creator>
    <dc:date>2012-05-23T09:20:28</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13305">
    <title>Re: [PATCH] bluetooth: Release transport when the pa_rtpoll_run loop finishes.</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13305</link>
    <description>&lt;pre&gt;Hi Jarkko,

On Tue, May 22, 2012 at 3:58 PM, Jarkko Suontausta
&amp;lt;jarkko.suontausta&amp;lt; at &amp;gt;digia.com&amp;gt; wrote:

Looks good, ack.


&lt;/pre&gt;</description>
    <dc:creator>Luiz Augusto von Dentz</dc:creator>
    <dc:date>2012-05-23T09:15:41</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13304">
    <title>Re: Patches for Solaris</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13304</link>
    <description>&lt;pre&gt;
Apologies, but I had an error in my previous patch.  The #if test
was reversed.  Sorry about this.  The attached patch is correct.

Brian


On 05/22/12 08:55 PM, Brian Cameron wrote:

--- pulseaudio-1.1/src/pulsecore/shm.c-orig2011-10-24 19:42:44.692685416 -0500
+++ pulseaudio-1.1/src/pulsecore/shm.c2011-10-24 20:24:30.605598557 -0500
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -68,8 +68,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  * /dev/shm. We can use that information to list all blocks and
  * cleanup unused ones */
 #define SHM_PATH "/dev/shm/"
+#define SHM_ID_LEN 10
+#elif defined(__sun)
+#define SHM_PATH "/tmp"
+#define SHM_ID_LEN 15
 #else
 #undef SHM_PATH
+#define SHM_ID_LEN 0
 #endif
 
 #define SHM_MARKER ((int) 0xbeefcafe)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -359,10 +364,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int pa_shm_cleanup(void) {
         char fn[128];
         struct shm_marker *m;
 
-        if (strncmp(de-&amp;gt;d_name, "pulse-shm-", 10))
+#ifdef defined(__sun)
+        if (strncmp(de-&amp;gt;d_name, ".SHMDpulse-shm-", SHM_ID_LEN))
+#else
+        if (strncmp(de-&amp;gt;d_name, "pulse-shm-", SHM_ID_LEN))
+#endif
             continue;
 
-        if (pa_atou(de-&amp;gt;d_name + 10, &amp;amp;id) &amp;lt; 0)
+        if (pa_atou(de-&amp;gt;d_name + SHM_ID_LEN, &amp;amp;id) &amp;lt; 0)
             continue;
 
         if (pa_shm_attach_ro(&amp;amp;seg, id) &amp;lt; 0)
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
&lt;/pre&gt;</description>
    <dc:creator>Brian Cameron</dc:creator>
    <dc:date>2012-05-23T02:01:10</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13303">
    <title>Patches for Solaris</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13303</link>
    <description>&lt;pre&gt;
I am attaching 3 patches for consideration upstream:

- pulseaudio-05-shm.diff
   The shm files on Solaris end up with a different name.  This patch
   makes the code work on Solaris too.

- pulseaudio-07-sada.diff
   Fixes to improve the SunAudio plugin so it works better.

- pulsaudio-10-endian.diff
   On Sparc, WORDS_BIGENDIAN needs to get set if _BIG_ENDIAN is set.

Brian
--- pulseaudio-1.1/src/pulsecore/shm.c-orig2011-10-24 19:42:44.692685416 -0500
+++ pulseaudio-1.1/src/pulsecore/shm.c2011-10-24 20:24:30.605598557 -0500
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -68,8 +68,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  * /dev/shm. We can use that information to list all blocks and
  * cleanup unused ones */
 #define SHM_PATH "/dev/shm/"
+#define SHM_ID_LEN 10
+#elif defined(__sun)
+#define SHM_PATH "/tmp"
+#define SHM_ID_LEN 15
 #else
 #undef SHM_PATH
+#define SHM_ID_LEN 0
 #endif
 
 #define SHM_MARKER ((int) 0xbeefcafe)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -359,10 +364,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int pa_shm_cleanup(void) {
         char fn[128];
         struct shm_marker *m;
 
-        if (strncmp(de-&amp;gt;d_name, "pulse-shm-", 10))
+#ifdef defined(__sun)
+        if (strncmp(de-&amp;gt;d_name, "pulse-shm-", SHM_ID_LEN))
+#else
+        if (strncmp(de-&amp;gt;d_name, ".SHMDpulse-shm-", SHM_ID_LEN))
+#endif
             continue;
 
-        if (pa_atou(de-&amp;gt;d_name + 10, &amp;amp;id) &amp;lt; 0)
+        if (pa_atou(de-&amp;gt;d_name + SHM_ID_LEN, &amp;amp;id) &amp;lt; 0)
             continue;
 
         if (pa_shm_attach_ro(&amp;amp;seg, id) &amp;lt; 0)
--- pulseaudio-1.1/src/modules/module-solaris.c-orig2012-05-14 20:28:17.916336872 -0500
+++ pulseaudio-1.1/src/modules/module-solaris.c2012-05-14 20:28:38.353786471 -0500
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -137,6 +137,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const char* const valid_modargs[]
 static uint64_t get_playback_buffered_bytes(struct userdata *u) {
     audio_info_t info;
     uint64_t played_bytes;
+    int64_t buffered_bytes;
     int err;
 
     pa_assert(u-&amp;gt;sink);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -163,7 +164,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static uint64_t get_playback_buffered_by
 
     pa_smoother_put(u-&amp;gt;smoother, pa_rtclock_now(), pa_bytes_to_usec(played_bytes, &amp;amp;u-&amp;gt;sink-&amp;gt;sample_spec));
 
-    return u-&amp;gt;written_bytes - played_bytes;
+    buffered_bytes = u-&amp;gt;written_bytes - played_bytes;
+
+    if (buffered_bytes &amp;lt; 0) {
+        buffered_bytes = 0;
+    }
+
+    return (uint64_t) buffered_bytes;
 }
 
 static pa_usec_t sink_get_latency(struct userdata *u, pa_sample_spec *ss) {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -348,7 +355,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int suspend(struct userdata *u) {
 
     pa_log_info("Suspending...");
 
-    ioctl(u-&amp;gt;fd, AUDIO_DRAIN, NULL);
+    ioctl(u-&amp;gt;fd, I_FLUSH, FLUSHRW);
     pa_close(u-&amp;gt;fd);
     u-&amp;gt;fd = -1;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -485,14 +492,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int source_process_msg(pa_msgobje
 static void sink_set_volume(pa_sink *s) {
     struct userdata *u;
     audio_info_t info;
+    pa_volume_t v;
 
     pa_assert_se(u = s-&amp;gt;userdata);
 
+    if (u-&amp;gt;fd &amp;lt; 0) {
+       u-&amp;gt;fd = pa_open_cloexec(u-&amp;gt;device_name, u-&amp;gt;mode | O_NONBLOCK, 0);
+    }
+
     if (u-&amp;gt;fd &amp;gt;= 0) {
         AUDIO_INITINFO(&amp;amp;info);
 
-        info.play.gain = pa_cvolume_max(&amp;amp;s-&amp;gt;real_volume) * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
-        assert(info.play.gain &amp;lt;= AUDIO_MAX_GAIN);
+        v = pa_cvolume_max(&amp;amp;s-&amp;gt;real_volume);
+        if (v &amp;gt; PA_VOLUME_NORM) {
+                v = PA_VOLUME_NORM;
+        }
+
+        info.play.gain = v * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
+
+        pa_log_debug("PA_VOLUME_NORM is %ld", PA_VOLUME_NORM);
+        pa_log_debug("Setting volume %ld %ld", v, info.play.gain);
 
         if (ioctl(u-&amp;gt;fd, AUDIO_SETINFO, &amp;amp;info) &amp;lt; 0) {
             if (errno == EINVAL)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -513,6 +532,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void sink_get_volume(pa_sink *s) 
         if (ioctl(u-&amp;gt;fd, AUDIO_GETINFO, &amp;amp;info) &amp;lt; 0)
             pa_log("AUDIO_SETINFO: %s", pa_cstrerror(errno));
         else
+            pa_log_debug("Getting volume %ld %ld", info.play.gain, (info.play.gain * PA_VOLUME_NORM / AUDIO_MAX_GAIN));
             pa_cvolume_set(&amp;amp;s-&amp;gt;real_volume, s-&amp;gt;sample_spec.channels, info.play.gain * PA_VOLUME_NORM / AUDIO_MAX_GAIN);
     }
 }
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -520,14 +540,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void sink_get_volume(pa_sink *s) 
 static void source_set_volume(pa_source *s) {
     struct userdata *u;
     audio_info_t info;
+    pa_volume_t v;
 
     pa_assert_se(u = s-&amp;gt;userdata);
 
     if (u-&amp;gt;fd &amp;gt;= 0) {
         AUDIO_INITINFO(&amp;amp;info);
 
-        info.play.gain = pa_cvolume_max(&amp;amp;s-&amp;gt;real_volume) * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
-        assert(info.play.gain &amp;lt;= AUDIO_MAX_GAIN);
+        v = pa_cvolume_max(&amp;amp;s-&amp;gt;real_volume);
+        if (v &amp;gt; PA_VOLUME_NORM) {
+                v = PA_VOLUME_NORM;
+        }
+
+        info.play.gain = v * AUDIO_MAX_GAIN / PA_VOLUME_NORM;
 
         if (ioctl(u-&amp;gt;fd, AUDIO_SETINFO, &amp;amp;info) &amp;lt; 0) {
             if (errno == EINVAL)
--- pulseaudio-1.1/src/pulse/sample.h-orig2012-05-14 20:24:44.242497036 -0500
+++ pulseaudio-1.1/src/pulse/sample.h2012-05-14 20:24:27.792501491 -0500
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -117,6 +117,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; PA_C_DECL_BEGIN
 #define WORDS_BIGENDIAN
 #endif
 #endif
+#if defined(_BIG_ENDIAN)
+#define WORDS_BIGENDIAN
+#endif
 #endif
 
 /** Maximum number of allowed channels */
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
&lt;/pre&gt;</description>
    <dc:creator>Brian Cameron</dc:creator>
    <dc:date>2012-05-23T01:55:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13302">
    <title>Re: [PATCH] udev modules: don't use deprecatedfunctions</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13302</link>
    <description>&lt;pre&gt;Btw, these values have been unconditionnaly returned by udev for a while.

On 17 May 2012 22:50, Marc-Antoine Perennou &amp;lt;Marc-Antoine&amp;lt; at &amp;gt;perennou.com&amp;gt;wrote:

_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss&amp;lt; at &amp;gt;lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
&lt;/pre&gt;</description>
    <dc:creator>Marc-Antoine Perennou</dc:creator>
    <dc:date>2012-05-23T08:41:38</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13301">
    <title>Re: [PATCH] protocol-native: Use foreach to iterate trough modules.</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13301</link>
    <description>&lt;pre&gt;
Thanks, applied.

&lt;/pre&gt;</description>
    <dc:creator>Tanu Kaskinen</dc:creator>
    <dc:date>2012-05-23T03:35:53</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13300">
    <title>Re: [PATCH] protocol-native: Use foreach toiterate trough modules.</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13300</link>
    <description>&lt;pre&gt;I accidentally sent a bad patch, sorry for the spam.
This one should work.
From bfc8131e575f4ba50fdb899573bd5d3812c344af Mon Sep 17 00:00:00 2001
From: poljar &amp;lt;poljarinho&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date: Mon, 21 May 2012 21:42:20 +0200
Subject: [PATCH] protocol-native: Use foreach to iterate trough modules.

The PA_IDXSET_FOREACH is easier to read than the standard for loop.
Also pa_streq() should be used for checking string equality.
---
 src/pulsecore/protocol-native.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 396e143..b0fc8c8 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4623,11 +4623,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void command_extension(pa_pdispatch *pd, uint32_t command, uint32_t tag,
 
     if (idx != PA_INVALID_INDEX)
         m = pa_idxset_get_by_index(c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, idx);
-    else {
-        for (m = pa_idxset_first(c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, &amp;amp;idx); m; m = pa_idxset_next(c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, &amp;amp;idx))
-            if (strcmp(name, m-&amp;gt;name) == 0)
+    else
+        PA_IDXSET_FOREACH(m, c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, idx)
+            if (pa_streq(name, m-&amp;gt;name))
                 break;
-    }
 
     CHECK_VALIDITY(c-&amp;gt;pstream, m, tag, PA_ERR_NOEXTENSION);
     CHECK_VALIDITY(c-&amp;gt;pstream, m-&amp;gt;load_once || idx != PA_INVALID_INDEX, tag, PA_ERR_INVALID);
&lt;/pre&gt;</description>
    <dc:creator>poljarinho&lt; at &gt;gmail.com</dc:creator>
    <dc:date>2012-05-22T16:27:43</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13299">
    <title>[PATCH 3/3] pactl: Add unloading modules byname</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13299</link>
    <description>&lt;pre&gt;pactl was updated to make use of the recently added support for
unloading modules by name.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=48289
---
 man/pactl.1.xml.in |    4 ++--
 src/utils/pactl.c  |   15 +++++++++++----
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/man/pactl.1.xml.in b/man/pactl.1.xml.in
index 86e7609..693a5c5 100644
--- a/man/pactl.1.xml.in
+++ b/man/pactl.1.xml.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -119,8 +119,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; USA.
     &amp;lt;/option&amp;gt;
 
     &amp;lt;option&amp;gt;
-      &amp;lt;p&amp;gt;&amp;lt;opt&amp;gt;unload-module&amp;lt;/opt&amp;gt; &amp;lt;arg&amp;gt;ID&amp;lt;/arg&amp;gt;&amp;lt;/p&amp;gt;
-      &amp;lt;optdesc&amp;gt;&amp;lt;p&amp;gt;Unload the module instance identified by the specified numeric index.&amp;lt;/p&amp;gt;&amp;lt;/optdesc&amp;gt;
+      &amp;lt;p&amp;gt;&amp;lt;opt&amp;gt;unload-module&amp;lt;/opt&amp;gt; &amp;lt;arg&amp;gt;ID|NAME&amp;lt;/arg&amp;gt;&amp;lt;/p&amp;gt;
+      &amp;lt;optdesc&amp;gt;&amp;lt;p&amp;gt;Unload the module instance identified by the specified numeric index or unload all modules by the sepcified name.&amp;lt;/p&amp;gt;&amp;lt;/optdesc&amp;gt;
     &amp;lt;/option&amp;gt;
 
     &amp;lt;option&amp;gt;
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index 05a1519..5af4563 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -32,6 +32,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;stdlib.h&amp;gt;
 #include &amp;lt;getopt.h&amp;gt;
 #include &amp;lt;locale.h&amp;gt;
+#include &amp;lt;ctype.h&amp;gt;
 
 #include &amp;lt;sndfile.h&amp;gt;
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1152,7 +1153,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void context_state_callback(pa_context *c, void *userdata) {
                     break;
 
                 case UNLOAD_MODULE:
-                    pa_operation_unref(pa_context_unload_module(c, module_index, simple_callback, NULL));
+                    if (module_name)
+                        pa_operation_unref(pa_context_unload_module_by_name(c, module_name, simple_callback, NULL));
+                    else
+                        pa_operation_unref(pa_context_unload_module_by_index(c, module_index, simple_callback, NULL));
                     break;
 
                 case SUSPEND_SINK:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1345,7 +1349,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void help(const char *argv0) {
     printf("%s %s %s %s\n", argv0, _("[options]"), "play-sample ", _("NAME [SINK]"));
     printf("%s %s %s %s\n", argv0, _("[options]"), "remove-sample ", _("NAME"));
     printf("%s %s %s %s\n", argv0, _("[options]"), "load-module ", _("NAME [ARGS ...]"));
-    printf("%s %s %s %s\n", argv0, _("[options]"), "unload-module ", _("#N"));
+    printf("%s %s %s %s\n", argv0, _("[options]"), "unload-module ", _("NAME|#N"));
     printf("%s %s %s %s\n", argv0, _("[options]"), "move-(sink-input|source-output)", _("#N SINK|SOURCE"));
     printf("%s %s %s %s\n", argv0, _("[options]"), "suspend-(sink|source)", _("NAME|#N 1|0"));
     printf("%s %s %s %s\n", argv0, _("[options]"), "set-card-profile ", _("CARD PROFILE"));
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1568,11 +1572,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int main(int argc, char *argv[]) {
             action = UNLOAD_MODULE;
 
             if (argc != optind+2) {
-                pa_log(_("You have to specify a module index"));
+                pa_log(_("You have to specify a module index or name"));
                 goto quit;
             }
 
-            module_index = (uint32_t) atoi(argv[optind+1]);
+            if (isdigit(argv[optind+1][0]))
+                module_index = (uint32_t) atoi(argv[optind+1]);
+            else
+                module_name = argv[optind+1];
 
         } else if (pa_streq(argv[optind], "suspend-sink")) {
             action = SUSPEND_SINK;
&lt;/pre&gt;</description>
    <dc:creator>poljar</dc:creator>
    <dc:date>2012-05-22T16:06:14</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13298">
    <title>[PATCH 2/3] introspect: Add unloading modulesby name</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13298</link>
    <description>&lt;pre&gt;The native protocol should handle unloading modules by name. This
updates the protocol and client API.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=48289
---
 PROTOCOL                        |    7 +++++++
 configure.ac                    |    2 +-
 src/map-file                    |    2 ++
 src/pulse/introspect.c          |   31 ++++++++++++++++++++++++++++++-
 src/pulse/introspect.h          |   12 +++++++++---
 src/pulsecore/native-common.h   |    5 ++++-
 src/pulsecore/protocol-native.c |   30 ++++++++++++++++++++++++++----
 7 files changed, 79 insertions(+), 10 deletions(-)

diff --git a/PROTOCOL b/PROTOCOL
index acd53ba..9b8c9fe 100644
--- a/PROTOCOL
+++ b/PROTOCOL
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -321,6 +321,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; PA_COMMAND_GET_CARD_INFO_LIST), the following is added:
 
 Profile names must match earlier sent profile names for the same card.
 
+## v27, implemented by &amp;gt;= 3.0
+
+Renamed opcodes:
+    PA_COMMAND_UNLOAD_MODULE -&amp;gt; PA_COMMAND_UNLOAD_MODULE_BY_INDEX
+
+New opcodes:
+    PA_COMMAND_UNLOAD_MODULE_BY_NAME
 
 #### If you just changed the protocol, read this
 ## module-tunnel depends on the sink/source/sink-input/source-input protocol
diff --git a/configure.ac b/configure.ac
index f5f9b76..62cc5f8 100644
--- a/configure.ac
+++ b/configure.ac
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -36,7 +36,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; AC_SUBST(PA_MINOR, pa_minor)
 AC_SUBST(PA_MAJORMINOR, pa_major.pa_minor)
 
 AC_SUBST(PA_API_VERSION, 12)
-AC_SUBST(PA_PROTOCOL_VERSION, 26)
+AC_SUBST(PA_PROTOCOL_VERSION, 27)
 
 # The stable ABI for client applications, for the version info x:y:z
 # always will hold y=z
diff --git a/src/map-file b/src/map-file
index 69cf25b..4a9b95b 100644
--- a/src/map-file
+++ b/src/map-file
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -114,6 +114,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pa_context_suspend_sink_by_name;
 pa_context_suspend_source_by_index;
 pa_context_suspend_source_by_name;
 pa_context_unload_module;
+pa_context_unload_module_by_index;
+pa_context_unload_module_by_name;
 pa_context_unref;
 pa_cvolume_avg;
 pa_cvolume_avg_mask;
diff --git a/src/pulse/introspect.c b/src/pulse/introspect.c
index 38a9d1c..e251bcc 100644
--- a/src/pulse/introspect.c
+++ b/src/pulse/introspect.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1864,8 +1864,37 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pa_operation* pa_context_load_module(pa_context *c, const char*name, const char
     return o;
 }
 
+PA_WARN_REFERENCE(pa_context_unload_module, "This function is deprecated, use pa_context_unload_module_by_{name,index}");
+
 pa_operation* pa_context_unload_module(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata) {
-    return command_kill(c, PA_COMMAND_UNLOAD_MODULE, idx, cb, userdata);
+    return command_kill(c, PA_COMMAND_UNLOAD_MODULE_BY_INDEX, idx, cb, userdata);
+}
+
+pa_operation* pa_context_unload_module_by_index(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata) {
+    return command_kill(c, PA_COMMAND_UNLOAD_MODULE_BY_INDEX, idx, cb, userdata);
+}
+
+pa_operation* pa_context_unload_module_by_name(pa_context *c, const char *name, pa_context_success_cb_t cb, void *userdata) {
+    pa_operation *o;
+    pa_tagstruct *t;
+    uint32_t tag;
+
+    pa_assert(c);
+    pa_assert(PA_REFCNT_VALUE(c) &amp;gt;= 1);
+
+    PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED);
+    PA_CHECK_VALIDITY_RETURN_NULL(c, c-&amp;gt;state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
+    PA_CHECK_VALIDITY_RETURN_NULL(c, name &amp;amp;&amp;amp; *name, PA_ERR_INVALID);
+    PA_CHECK_VALIDITY_RETURN_NULL(c, c-&amp;gt;version &amp;gt;= 27, PA_ERR_NOTSUPPORTED);
+
+    o = pa_operation_new(c, NULL, (pa_operation_cb_t) cb, userdata);
+
+    t = pa_tagstruct_command(c, PA_COMMAND_UNLOAD_MODULE_BY_NAME, &amp;amp;tag);
+    pa_tagstruct_puts(t, name);
+    pa_pstream_send_tagstruct(c-&amp;gt;pstream, t);
+    pa_pdispatch_register_reply(c-&amp;gt;pdispatch, tag, DEFAULT_TIMEOUT, pa_context_simple_ack_callback, pa_operation_ref(o), (pa_free_cb_t) pa_operation_unref);
+
+    return o;
 }
 
 /*** Autoload stuff ***/
diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h
index 0072f5d..203798c 100644
--- a/src/pulse/introspect.h
+++ b/src/pulse/introspect.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -176,7 +176,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
  * \subsection module_subsec Modules
  *
  * Server modules can be remotely loaded and unloaded using
- * pa_context_load_module() and pa_context_unload_module().
+ * pa_context_load_module() and pa_context_unload_module_by_{name|index}().
  *
  * \subsection client_subsec Clients
  *
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -409,8 +409,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef void (*pa_context_index_cb_t)(pa_context *c, uint32_t idx, void *userdat
 /** Load a module. */
 pa_operation* pa_context_load_module(pa_context *c, const char*name, const char *argument, pa_context_index_cb_t cb, void *userdata);
 
-/** Unload a module. */
-pa_operation* pa_context_unload_module(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata);
+/** \deprecated Unload a module. */
+pa_operation* pa_context_unload_module(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata) PA_GCC_DEPRECATED;
+
+/** Unload a module by its index. \since 3.0 */
+pa_operation* pa_context_unload_module_by_index(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata);
+
+/** Unload a module by its name. \since 3.0 */
+pa_operation* pa_context_unload_module_by_name(pa_context *c, const char*name, pa_context_success_cb_t cb, void *userdata);
 
 /** &amp;lt; at &amp;gt;} */
 
diff --git a/src/pulsecore/native-common.h b/src/pulsecore/native-common.h
index 8fde023..1b50e01 100644
--- a/src/pulsecore/native-common.h
+++ b/src/pulsecore/native-common.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -92,7 +92,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; enum {
     PA_COMMAND_KILL_SOURCE_OUTPUT,
 
     PA_COMMAND_LOAD_MODULE,
-    PA_COMMAND_UNLOAD_MODULE,
+    PA_COMMAND_UNLOAD_MODULE_BY_INDEX,
 
     /* Obsolete */
     PA_COMMAND_ADD_AUTOLOAD___OBSOLETE,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -173,6 +173,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; enum {
     PA_COMMAND_SET_SOURCE_OUTPUT_VOLUME,
     PA_COMMAND_SET_SOURCE_OUTPUT_MUTE,
 
+    /* Supported since protocol v27 (3.0) */
+    PA_COMMAND_UNLOAD_MODULE_BY_NAME,
+
     PA_COMMAND_MAX
 };
 
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 396e143..6ec1cbc 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -280,7 +280,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void command_set_default_sink_or_source(pa_pdispatch *pd, uint32_t comman
 static void command_set_stream_name(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
 static void command_kill(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
 static void command_load_module(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
-static void command_unload_module(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
+static void command_unload_module_by_index(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
+static void command_unload_module_by_name(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
 static void command_cork_record_stream(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
 static void command_flush_record_stream(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
 static void command_move_stream(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -364,7 +365,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const pa_pdispatch_cb_t command_table[PA_COMMAND_MAX] = {
     [PA_COMMAND_KILL_SINK_INPUT] = command_kill,
     [PA_COMMAND_KILL_SOURCE_OUTPUT] = command_kill,
     [PA_COMMAND_LOAD_MODULE] = command_load_module,
-    [PA_COMMAND_UNLOAD_MODULE] = command_unload_module,
+    [PA_COMMAND_UNLOAD_MODULE_BY_INDEX] = command_unload_module_by_index,
+    [PA_COMMAND_UNLOAD_MODULE_BY_NAME] = command_unload_module_by_name,
 
     [PA_COMMAND_GET_AUTOLOAD_INFO___OBSOLETE] = NULL,
     [PA_COMMAND_GET_AUTOLOAD_INFO_LIST___OBSOLETE] = NULL,
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -393,7 +395,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const pa_pdispatch_cb_t command_table[PA_COMMAND_MAX] = {
     [PA_COMMAND_SET_SINK_PORT] = command_set_sink_or_source_port,
     [PA_COMMAND_SET_SOURCE_PORT] = command_set_sink_or_source_port,
 
-    [PA_COMMAND_EXTENSION] = command_extension
+    [PA_COMMAND_EXTENSION] = command_extension,
 };
 
 /* structure management */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4431,7 +4433,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void command_load_module(pa_pdispatch *pd, uint32_t command, uint32_t tag
     pa_pstream_send_tagstruct(c-&amp;gt;pstream, reply);
 }
 
-static void command_unload_module(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
+static void command_unload_module_by_index(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
     pa_native_connection *c = PA_NATIVE_CONNECTION(userdata);
     uint32_t idx;
     pa_module *m;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4453,6 +4455,26 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void command_unload_module(pa_pdispatch *pd, uint32_t command, uint32_t t
     pa_pstream_send_simple_ack(c-&amp;gt;pstream, tag);
 }
 
+static void command_unload_module_by_name(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
+    pa_native_connection *c = PA_NATIVE_CONNECTION(userdata);
+    const char *name;
+
+    pa_native_connection_assert_ref(c);
+    pa_assert(t);
+
+    if (pa_tagstruct_gets(t, &amp;amp;name) &amp;lt; 0 ||
+        !pa_tagstruct_eof(t)) {
+        protocol_error(c);
+    }
+
+    CHECK_VALIDITY(c-&amp;gt;pstream, c-&amp;gt;authorized, tag, PA_ERR_ACCESS);
+    CHECK_VALIDITY(c-&amp;gt;pstream, name, tag, PA_ERR_INVALID);
+
+    /** Todo add error reporting if no module is unloaded */
+    pa_module_unload_request_by_name(c-&amp;gt;protocol-&amp;gt;core, name, FALSE);
+    pa_pstream_send_simple_ack(c-&amp;gt;pstream, tag);
+}
+
 static void command_move_stream(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
     pa_native_connection *c = PA_NATIVE_CONNECTION(userdata);
     uint32_t idx = PA_INVALID_INDEX, idx_device = PA_INVALID_INDEX;
&lt;/pre&gt;</description>
    <dc:creator>poljar</dc:creator>
    <dc:date>2012-05-22T16:06:13</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13297">
    <title>[PATCH 1/3] module: Add support for unloadingby name.</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13297</link>
    <description>&lt;pre&gt;The request for unloading modules by name was added to module.c.
If there are more modules with the same name all of them are unloaded.
---
 src/pulsecore/module.c |   11 +++++++++++
 src/pulsecore/module.h |    1 +
 2 files changed, 12 insertions(+)

diff --git a/src/pulsecore/module.c b/src/pulsecore/module.c
index 8b3ff8f..332bc2b 100644
--- a/src/pulsecore/module.c
+++ b/src/pulsecore/module.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -252,6 +252,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void pa_module_unload_request_by_index(pa_core *c, uint32_t idx, pa_bool_t force
     pa_module_unload_request(m, force);
 }
 
+void pa_module_unload_request_by_name(pa_core *c, const char *name, pa_bool_t force) {
+    pa_module *m;
+    uint32_t idx;
+
+    pa_assert(c);
+
+    PA_IDXSET_FOREACH(m, c-&amp;gt;modules, idx)
+        if (pa_streq(name, m-&amp;gt;name))
+            pa_module_unload_request(m, force);
+}
+
 int pa_module_get_n_used(pa_module*m) {
     pa_assert(m);
 
diff --git a/src/pulsecore/module.h b/src/pulsecore/module.h
index 0b6cb7c..2ba452c 100644
--- a/src/pulsecore/module.h
+++ b/src/pulsecore/module.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -57,6 +57,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void pa_module_unload_by_index(pa_core *c, uint32_t idx, pa_bool_t force);
 
 void pa_module_unload_request(pa_module *m, pa_bool_t force);
 void pa_module_unload_request_by_index(pa_core *c, uint32_t idx, pa_bool_t force);
+void pa_module_unload_request_by_name(pa_core *c, const char *name, pa_bool_t force);
 
 void pa_module_unload_all(pa_core *c);
 
&lt;/pre&gt;</description>
    <dc:creator>poljar</dc:creator>
    <dc:date>2012-05-22T16:06:12</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13296">
    <title>[PATCH 0/3] Unloading modules by name</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13296</link>
    <description>&lt;pre&gt;A new function was added to module.c to handle unload requests by name.
The native protocol was extended and a new opcode was introduced, and 
finally pactl was extended to make use of the new functionality.

 PROTOCOL                        |    7 +++++++
 configure.ac                    |    2 +-
 man/pactl.1.xml.in              |    4 ++--
 src/map-file                    |    2 ++
 src/pulse/introspect.c          |   31 ++++++++++++++++++++++++++++++-
 src/pulse/introspect.h          |   12 +++++++++---
 src/pulsecore/module.c          |   11 +++++++++++
 src/pulsecore/module.h          |    1 + 
 src/pulsecore/native-common.h   |    5 ++++-
 src/pulsecore/protocol-native.c |   30 ++++++++++++++++++++++++++----
 src/utils/pactl.c               |   15 +++++++++++----
&lt;/pre&gt;</description>
    <dc:creator>poljar</dc:creator>
    <dc:date>2012-05-22T16:06:11</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13295">
    <title>[PATCH] bluetooth: Release transport when thepa_rtpoll_run loop finishes.</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13295</link>
    <description>&lt;pre&gt;Based on a patch by Marko Ollonen.
---
 src/modules/bluetooth/module-bluetooth-device.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 0b12cc7..68c4efc 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1731,11 +1731,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void thread_func(void *userdata) {
             pollfd-&amp;gt;events = (short) (((u-&amp;gt;sink &amp;amp;&amp;amp; PA_SINK_IS_LINKED(u-&amp;gt;sink-&amp;gt;thread_info.state) &amp;amp;&amp;amp; !writable) ? POLLOUT : 0) |
                                       (u-&amp;gt;source &amp;amp;&amp;amp; PA_SOURCE_IS_LINKED(u-&amp;gt;source-&amp;gt;thread_info.state) ? POLLIN : 0));
 
-        if ((ret = pa_rtpoll_run(u-&amp;gt;rtpoll, TRUE)) &amp;lt; 0)
+        if ((ret = pa_rtpoll_run(u-&amp;gt;rtpoll, TRUE)) &amp;lt; 0) {
+            pa_log_debug("pa_rtpoll_run failed with: %d", ret);
             goto fail;
-
-        if (ret == 0)
+        }
+        if (ret == 0) {
+            pa_log_debug("IO thread shutdown requested, stopping cleanly");
+            if (u-&amp;gt;transport)
+                bt_transport_release(u);
+            else
+                stop_stream_fd(u);
             goto finish;
+        }
 
         pollfd = u-&amp;gt;rtpoll_item ? pa_rtpoll_item_get_pollfd(u-&amp;gt;rtpoll_item, NULL) : NULL;
 
&lt;/pre&gt;</description>
    <dc:creator>Jarkko Suontausta</dc:creator>
    <dc:date>2012-05-22T12:58:33</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13294">
    <title>[PATCH] protocol-native: Use foreach toiterate trough modules.</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13294</link>
    <description>&lt;pre&gt;The PA_IDXSET_FOREACH is easier to read than the standard for loop.
Also pa_streq() should be used for checking string equality.
---
 src/pulsecore/protocol-native.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index c2d5fcf..f221d21 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -4621,8 +4621,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void command_extension(pa_pdispatch *pd, uint32_t command, uint32_t tag,
     if (idx != PA_INVALID_INDEX)
         m = pa_idxset_get_by_index(c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, idx);
     else {
-        for (m = pa_idxset_first(c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, &amp;amp;idx); m; m = pa_idxset_next(c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, &amp;amp;idx))
-            if (strcmp(name, m-&amp;gt;name) == 0)
+        PA_IDXSET_FOREACH(m, c-&amp;gt;protocol-&amp;gt;core-&amp;gt;modules, idx) {
+            if (pa_streq(name, m-&amp;gt;name))
                 break;
     }
 
&lt;/pre&gt;</description>
    <dc:creator>poljar</dc:creator>
    <dc:date>2012-05-22T12:37:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13293">
    <title>Re: About My Blog Space</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13293</link>
    <description>&lt;pre&gt;Hi Deng,

'Twas brillig, and rong deng at 21/05/12 16:45 did gyre and gimble:

That's perfect!!

Your feed is now included here:
http://freedesktop.org/software/pulseaudio/planet/

If you would like a little face icon to go with your posts (e.g. see
what Arun's posts look like) please email me a suitable png file. Size
isn't too important but about 80x100px is probably about right.

Also, I have momentarily forgotten your IRC nick name, so please let me
know that when you get a sec and I'll add it into the feed. It's not all
that important but it's a nice to have :)

Cheers

Col

&lt;/pre&gt;</description>
    <dc:creator>Colin Guthrie</dc:creator>
    <dc:date>2012-05-22T08:36:28</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13292">
    <title>Failed to load module "module-bluetooth-device"</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13292</link>
    <description>&lt;pre&gt;when i give command

aplay gong.wav

the file plays ok via bluetooth speaker, but i get to console:

Playing WAVE 'gong.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
May 22 10:57:59 siika kernel: [27439.133117] input: 00:02:3C:30:37:DE as /devices/virtual/input/input28
May 22 10:57:59 siika pulseaudio[4416]: [pulseaudio] module.c: Failed to load module "module-bluetooth-device" (argument: "address="00:02:3C:30:37:DE" path="/org/bluez/2553/hci0/dev_00_02_3C_30_37_DE""): initialization failed.
May 22 10:57:59 siika pulseaudio[4416]: [pulseaudio] module.c: Failed to load module "module-bluetooth-device" (argument: "address="00:02:3C:30:37:DE" path="/org/bluez/2553/hci0/dev_00_02_3C_30_37_DE""): initialization failed.
May 22 10:57:59 siika pulseaudio[4416]: [pulseaudio] module.c: Failed to load module "module-bluetooth-device" (argument: "address="00:02:3C:30:37:DE" path="/org/bluez/2553/hci0/dev_00_02_3C_30_37_DE""): initialization failed.
jh&amp;lt; at &amp;gt;siika:~$ May 22 10:58:04 siika rtkit-daemon[4418]: Successfully made thread 24411 of process 4416 (/usr/bin/pulseaudio (deleted)) owned by '1000' RT at priority 5.

why is that?

and then when i give command

paplay gong.wav

the file gets played via internal speaker, not bluetooth
speaker. pavucontrol does show bluetooth speaker after aplay command,
but then it disappears.  how do i tell to paplay to use by
default the bluetooth speaker if it is turned on?

&lt;/pre&gt;</description>
    <dc:creator>Juha Heinanen</dc:creator>
    <dc:date>2012-05-22T08:04:56</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13291">
    <title>Re: [PATCH] pactl: Added unloading modules by name</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13291</link>
    <description>&lt;pre&gt;
Ok. The check in the module loading command is probably done because the
name will be used when accessing the file system. With module unloading
there's no need to worry about that.


Thanks!

&lt;/pre&gt;</description>
    <dc:creator>Tanu Kaskinen</dc:creator>
    <dc:date>2012-05-22T01:56:28</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13290">
    <title>Re: My attempt to reduce latency with pacat and tvtime</title>
    <link>http://permalink.gmane.org/gmane.comp.audio.pulseaudio.general/13290</link>
    <description>&lt;pre&gt;
That's an interesting idea.  I suppose the audio frames would have to be
queued up and then rendered after the appropriate delay.  I'm not sure
if that would be simpler than my patch or not.  I'd have to know more
about how tvtime handles audio.

One concern is that tvtime has not had a release since 2005.  Also, are
there other programs that don't maintain A/V sync?  Perhaps it would
benefit them as well.


Fair enough.  My hope was just to keep it low enough.

&lt;/pre&gt;</description>
    <dc:creator>Steven Elliott</dc:creator>
    <dc:date>2012-05-22T01:30:04</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.audio.pulseaudio.general">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.audio.pulseaudio.general</link>
  </textinput>
</rdf:RDF>

