Package: osspd-pulseaudio
Severity: important
Dear Maintainer,
The current osspd packages isn't working with current pulseaudio and it
hasn't
for more than a year. I didn't file a bug back then, but I can confirm
that
at the time it was a pulseaudio update that broke osspd.
Downgrading to an earlier version fixed the problem.
Here is what the osspd logs says:
ossp-padsp[] WARN: failed to subscribe to context events (Bad state)
ossp-padsp[] ERR: failed to connect context, state=5 (Bad state)
This bug has also been reported on launchpad for Ubuntu:
https://bugs.launchpad.net/ubuntu/+source/osspd/+bug/1857810
Almost 18 months later, I did found (by pure luck) that the ArchLinux
package
has a fix for this problem.
Please find a debdiff in attachment so that you can upload the fix in
Debian.
Best Regards,
Sébastien
diff -Nru osspd-1.3.2/debian/changelog osspd-1.3.2/debian/changelog
--- osspd-1.3.2/debian/changelog 2019-01-25 15:36:20.000000000 +0100
+++ osspd-1.3.2/debian/changelog 2021-04-08 09:01:51.000000000 +0200
@@ -1,3 +1,13 @@
+osspd (1.3.2-12) UNRELEASED; urgency=low
+
+ * cherrypick 2 commits from upstream GIT:
+ + d/p/GIT-fix-adsp_se.patch
+ + d/p/GIT-fix-compiler-warnings.patch
+ * Add workaround for pulseaudio >= 13
+ d/p/Hack-to-work-with-modern-PulseAudio.patch
+
+ -- Sébastien Noel <sebast...@twolife.be> Thu, 08 Apr 2021 09:01:51 +0200
+
osspd (1.3.2-11) unstable; urgency=medium
* Update Standards-Version to 4.3.0. No changes needed.
diff -Nru osspd-1.3.2/debian/patches/GIT-fix-adsp_se.patch osspd-1.3.2/debian/patches/GIT-fix-adsp_se.patch
--- osspd-1.3.2/debian/patches/GIT-fix-adsp_se.patch 1970-01-01 01:00:00.000000000 +0100
+++ osspd-1.3.2/debian/patches/GIT-fix-adsp_se.patch 2021-04-08 09:01:51.000000000 +0200
@@ -0,0 +1,24 @@
+From 4c6161d951daa98f6463904f76b3fa2ce7216194 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <t...@kernel.org>
+Date: Mon, 21 Feb 2011 11:54:06 +0100
+Subject: [PATCH] adsp_se was incorrectly created with dsp_ops. Create it with
+ adsp_ops.
+
+Reported-by: Aaron <aaron.ha...@gmail.com>
+---
+ osspd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/osspd.c b/osspd.c
+index 37c9b35..df1cfc4 100644
+--- a/osspd.c
++++ b/osspd.c
+@@ -2253,7 +2253,7 @@ int main(int argc, char **argv)
+ param.mixer_major, param.mixer_minor,
+ args.argc, args.argv);
+ if (strlen(param.adsp_name))
+- adsp_se = setup_ossp_cuse(&dsp_ops, param.adsp_name,
++ adsp_se = setup_ossp_cuse(&adsp_ops, param.adsp_name,
+ param.adsp_major, param.adsp_minor,
+ args.argc, args.argv);
+
diff -Nru osspd-1.3.2/debian/patches/GIT-fix-compiler-warnings.patch osspd-1.3.2/debian/patches/GIT-fix-compiler-warnings.patch
--- osspd-1.3.2/debian/patches/GIT-fix-compiler-warnings.patch 1970-01-01 01:00:00.000000000 +0100
+++ osspd-1.3.2/debian/patches/GIT-fix-compiler-warnings.patch 2021-04-08 08:58:42.000000000 +0200
@@ -0,0 +1,251 @@
+From 37eb730a452f0ded2ed1c174feb438e3df041581 Mon Sep 17 00:00:00 2001
+From: Miklos Szeredi <mszer...@suse.cz>
+Date: Fri, 11 Nov 2011 14:19:32 +0100
+Subject: [PATCH] fix compiler warnings
+
+---
+ ossp-padsp.c | 3 ---
+ osspd.c | 75 ++++++++++++++++++++++++++++++----------------------
+ 2 files changed, 44 insertions(+), 34 deletions(-)
+
+diff --git a/ossp-padsp.c b/ossp-padsp.c
+index 1871f5b..3143960 100644
+--- a/ossp-padsp.c
++++ b/ossp-padsp.c
+@@ -972,16 +972,13 @@ static void do_mmap_read(size_t bytes)
+
+ static void stream_rw_callback(pa_stream *s, size_t length, void *userdata)
+ {
+- int dir;
+ size_t size;
+
+ if (s == stream[PLAY]) {
+- dir = PLAY;
+ size = pa_stream_writable_size(s);
+ if (mmap_map[PLAY])
+ do_mmap_write(size);
+ } else if (s == stream[REC]) {
+- dir = REC;
+ size = pa_stream_readable_size(s);
+ if (mmap_map[REC])
+ do_mmap_read(size);
+diff --git a/osspd.c b/osspd.c
+index df1cfc4..4be1ad5 100644
+--- a/osspd.c
++++ b/osspd.c
+@@ -469,15 +469,6 @@ static int ioctl_prep_uarg(fuse_req_t req, void *in, size_t in_sz, void *out,
+ return; \
+ } while (0)
+
+-#define IOCTL_RETURN(result, outp) do { \
+- if ((outp) != NULL) \
+- fuse_reply_ioctl(req, result, (outp), sizeof(*(outp))); \
+- else \
+- fuse_reply_ioctl(req, result, NULL, 0); \
+- return; \
+-} while (0)
+-
+-
+ /***************************************************************************
+ * Mixer implementation
+ */
+@@ -709,7 +700,8 @@ static void mixer_simple_ioctl(fuse_req_t req, struct ossp_mixer *mixer,
+ strncpy(info.id, id, sizeof(info.id) - 1);
+ strncpy(info.name, name, sizeof(info.name) - 1);
+ info.modify_counter = mixer->modify_counter;
+- IOCTL_RETURN(0, &info);
++ fuse_reply_ioctl(req, 0, &info, sizeof(info));
++ break;
+ }
+
+ case SOUND_OLD_MIXER_INFO: {
+@@ -718,7 +710,8 @@ static void mixer_simple_ioctl(fuse_req_t req, struct ossp_mixer *mixer,
+ PREP_UARG(NULL, &info);
+ strncpy(info.id, id, sizeof(info.id) - 1);
+ strncpy(info.name, name, sizeof(info.name) - 1);
+- IOCTL_RETURN(0, &info);
++ fuse_reply_ioctl(req, 0, &info, sizeof(info));
++ break;
+ }
+
+ case OSS_GETVERSION:
+@@ -737,16 +730,16 @@ static void mixer_simple_ioctl(fuse_req_t req, struct ossp_mixer *mixer,
+ goto puti;
+ puti:
+ PREP_UARG(NULL, &i);
+- IOCTL_RETURN(0, &i);
++ fuse_reply_ioctl(req, 0, &i, sizeof(i));
++ break;
+
+ case SOUND_MIXER_WRITE_RECSRC:
+- IOCTL_RETURN(0, NULL);
++ fuse_reply_ioctl(req, 0, NULL, 0);
++ break;
+
+ default:
+ *not_minep = 1;
+- return;
+ }
+- assert(0);
+ }
+
+ static void mixer_do_ioctl(fuse_req_t req, struct ossp_mixer *mixer,
+@@ -787,7 +780,8 @@ static void mixer_do_ioctl(fuse_req_t req, struct ossp_mixer *mixer,
+ break;
+ default:
+ i = 0;
+- IOCTL_RETURN(0, &i);
++ fuse_reply_ioctl(req, 0, &i, sizeof(i));
++ return;
+ }
+
+ init_mixer_cmd(&mxcmd, mixer);
+@@ -837,7 +831,12 @@ static void mixer_do_ioctl(fuse_req_t req, struct ossp_mixer *mixer,
+ finish_mixer_cmd(&mxcmd);
+ free(osa);
+
+- IOCTL_RETURN(0, out_bufsz ? &mxcmd.rvol : NULL);
++ if (out_bufsz)
++ fuse_reply_ioctl(req, 0, &mxcmd.rvol, sizeof(mxcmd.rvol));
++ else
++ fuse_reply_ioctl(req, 0, NULL, 0);
++
++ return;
+
+ err:
+ fuse_reply_err(req, -rc);
+@@ -1510,7 +1509,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ case OSS_GETVERSION:
+ i = SNDRV_OSS_VERSION;
+ PREP_UARG(NULL, &i);
+- IOCTL_RETURN(0, &i);
++ fuse_reply_ioctl(req, 0, &i, sizeof(i));
++ break;
+
+ case SNDCTL_DSP_GETCAPS:
+ i = DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER |
+@@ -1519,12 +1519,14 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ #endif
+ DSP_CAP_MULTI;
+ PREP_UARG(NULL, &i);
+- IOCTL_RETURN(0, &i);
++ fuse_reply_ioctl(req, 0, &i, sizeof(i));
++ break;
+
+ case SNDCTL_DSP_NONBLOCK:
+ dsps->nonblock = 1;
+ ret = 0;
+- IOCTL_RETURN(0, NULL);
++ fuse_reply_ioctl(req, 0, NULL, 0);
++ break;
+
+ case SNDCTL_DSP_RESET: op = OSSP_DSP_RESET; goto nd;
+ case SNDCTL_DSP_SYNC: op = OSSP_DSP_SYNC; goto nd;
+@@ -1533,7 +1535,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ ret = exec_simple_cmd(&dsps->os, op, NULL, NULL);
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, NULL);
++ fuse_reply_ioctl(req, 0, NULL, 0);
++ break;
+
+ case SOUND_PCM_READ_RATE: op = OSSP_DSP_GET_RATE; goto ri;
+ case SOUND_PCM_READ_BITS: op = OSSP_DSP_GET_FORMAT; goto ri;
+@@ -1546,7 +1549,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ ret = exec_simple_cmd(&dsps->os, op, NULL, &i);
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, &i);
++ fuse_reply_ioctl(req, 0, &i, sizeof(i));
++ break;
+
+ case SNDCTL_DSP_SPEED: op = OSSP_DSP_SET_RATE; goto wi;
+ case SNDCTL_DSP_SETFMT: op = OSSP_DSP_SET_FORMAT; goto wi;
+@@ -1557,7 +1561,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ ret = exec_simple_cmd(&dsps->os, op, &i, &i);
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, &i);
++ fuse_reply_ioctl(req, 0, &i, sizeof(i));
++ break;
+
+ case SNDCTL_DSP_STEREO:
+ PREP_UARG(NULL, &i);
+@@ -1566,7 +1571,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ i--;
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, &i);
++ fuse_reply_ioctl(req, 0, &i, sizeof(i));
++ break;
+
+ case SNDCTL_DSP_SETFRAGMENT:
+ PREP_UARG(&i, NULL);
+@@ -1574,7 +1580,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ OSSP_DSP_SET_FRAGMENT, &i, NULL);
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, NULL);
++ fuse_reply_ioctl(req, 0, NULL, 0);
++ break;
+
+ case SNDCTL_DSP_SETTRIGGER:
+ PREP_UARG(&i, NULL);
+@@ -1582,7 +1589,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ OSSP_DSP_SET_TRIGGER, &i, NULL);
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, NULL);
++ fuse_reply_ioctl(req, 0, NULL, 0);
++ break;
+
+ case SNDCTL_DSP_GETOSPACE:
+ case SNDCTL_DSP_GETISPACE: {
+@@ -1603,7 +1611,8 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ ret = exec_simple_cmd(&dsps->os, op, NULL, &info);
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, &info);
++ fuse_reply_ioctl(req, 0, &info, sizeof(info));
++ break;
+ }
+
+ case SNDCTL_DSP_GETOPTR:
+@@ -1616,14 +1625,16 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ ret = exec_simple_cmd(&dsps->os, op, NULL, &info);
+ if (ret)
+ goto err;
+- IOCTL_RETURN(0, &info);
++ fuse_reply_ioctl(req, 0, &info, sizeof(info));
++ break;
+ }
+
+ case SNDCTL_DSP_GETODELAY:
+ PREP_UARG(NULL, &i);
+ i = 0;
+ ret = exec_simple_cmd(&dsps->os, OSSP_DSP_GET_ODELAY, NULL, &i);
+- IOCTL_RETURN(ret, &i); /* always copy out result, 0 on err */
++ fuse_reply_ioctl(req, ret, &i, sizeof(i)); /* always copy out result, 0 on err */
++ break;
+
+ case SOUND_PCM_WRITE_FILTER:
+ case SOUND_PCM_READ_FILTER:
+@@ -1638,14 +1649,16 @@ static void dsp_ioctl(fuse_req_t req, int signed_cmd, void *uarg,
+ case SNDCTL_DSP_SETSYNCRO:
+ case SNDCTL_DSP_SETDUPLEX:
+ case SNDCTL_DSP_PROFILE:
+- IOCTL_RETURN(0, NULL);
++ fuse_reply_ioctl(req, 0, NULL, 0);
++ break;
+
+ default:
+ warn_os(os, "unknown ioctl 0x%x", cmd);
+ ret = -EINVAL;
+ goto err;
+ }
+- assert(0); /* control shouldn't reach here */
++ return;
++
+ err:
+ fuse_reply_err(req, -ret);
+ }
diff -Nru osspd-1.3.2/debian/patches/Hack-to-work-with-modern-PulseAudio.patch osspd-1.3.2/debian/patches/Hack-to-work-with-modern-PulseAudio.patch
--- osspd-1.3.2/debian/patches/Hack-to-work-with-modern-PulseAudio.patch 1970-01-01 01:00:00.000000000 +0100
+++ osspd-1.3.2/debian/patches/Hack-to-work-with-modern-PulseAudio.patch 2021-04-08 08:56:41.000000000 +0200
@@ -0,0 +1,37 @@
+From: "Jan Alexander Steffens (heftig)" <jan.steff...@gmail.com>
+Date: Fri, 18 Dec 2020 23:17:36 +0000
+Subject: [PATCH] Hack to work with modern PulseAudio
+
+---
+ ossp-padsp.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/ossp-padsp.c b/ossp-padsp.c
+index c505b57..b4ac097 100644
+--- a/ossp-padsp.c
++++ b/ossp-padsp.c
+@@ -22,6 +22,8 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <linux/limits.h>
++#include <stdlib.h>
+
+ #include <pulse/pulseaudio.h>
+ #include <sys/soundcard.h>
+@@ -1478,9 +1480,15 @@ static void action_post(void)
+ int main(int argc, char **argv)
+ {
+ int rc;
++ static char runtime_dir[PATH_MAX];
+
+ ossp_slave_init(argc, argv);
+
++ snprintf(runtime_dir, sizeof runtime_dir, "/run/user/%llu",
++ (long long unsigned) getuid());
++ if (access(runtime_dir, R_OK | X_OK) == 0)
++ setenv("XDG_RUNTIME_DIR", runtime_dir, 0);
++
+ page_size = sysconf(_SC_PAGE_SIZE);
+
+ mainloop = pa_threaded_mainloop_new();
diff -Nru osspd-1.3.2/debian/patches/series osspd-1.3.2/debian/patches/series
--- osspd-1.3.2/debian/patches/series 2019-01-25 15:36:20.000000000 +0100
+++ osspd-1.3.2/debian/patches/series 2021-04-08 09:01:51.000000000 +0200
@@ -5,3 +5,6 @@
0005-Add-pthread-compiler-and-linker-flag.patch
0006-fix-build-on-MIPS.patch
0007-cross.patch
+GIT-fix-adsp_se.patch
+GIT-fix-compiler-warnings.patch
+Hack-to-work-with-modern-PulseAudio.patch