MFH: r521037
www/firefox: backport upstream sndio fixes Apparently, it fixes random tab crashes. Submitted by: tobik Approved by: ports-secteam blanket
This commit is contained in:
parent
b6460d44b2
commit
86ea81d303
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/branches/2019Q4/; revision=521041
@ -3,6 +3,7 @@
|
||||
|
||||
PORTNAME= thunderbird
|
||||
DISTVERSION= 68.3.1
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= mail news net-im
|
||||
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
|
||||
MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source
|
||||
|
113
mail/thunderbird/files/patch-cubeb-sndio
Normal file
113
mail/thunderbird/files/patch-cubeb-sndio
Normal file
@ -0,0 +1,113 @@
|
||||
https://github.com/kinetiknz/cubeb/commit/a71f116501fe39962599c435ef65066f7e7ea9f5
|
||||
https://github.com/kinetiknz/cubeb/commit/3025cbec70f3ed097ec9a2f33a4823316a29efc4
|
||||
https://github.com/kinetiknz/cubeb/commit/bb2735fa2ff680fdc615edbb363b19ff4a759503
|
||||
https://github.com/kinetiknz/cubeb/pull/564
|
||||
|
||||
diff --git a/src/cubeb_sndio.c b/src/cubeb_sndio.c
|
||||
index 4a05bd84..34b3513d 100644
|
||||
--- media/libcubeb/src/cubeb_sndio.c
|
||||
+++ media/libcubeb/src/cubeb_sndio.c
|
||||
@@ -32,6 +32,7 @@
|
||||
X(sio_eof) \
|
||||
X(sio_getpar) \
|
||||
X(sio_initpar) \
|
||||
+ X(sio_nfds) \
|
||||
X(sio_onmove) \
|
||||
X(sio_open) \
|
||||
X(sio_pollfd) \
|
||||
@@ -124,6 +125,23 @@ s16_to_float(void *ptr, long nsamp)
|
||||
*(--dst) = (1. / 32768) * *(--src);
|
||||
}
|
||||
|
||||
+static const char *
|
||||
+sndio_get_device()
|
||||
+{
|
||||
+#ifdef __linux__
|
||||
+ /*
|
||||
+ * On other platforms default to sndio devices,
|
||||
+ * so cubebs other backends can be used instead.
|
||||
+ */
|
||||
+ const char *dev = getenv("AUDIODEVICE");
|
||||
+ if (dev == NULL || *dev == '\0')
|
||||
+ return "snd/0";
|
||||
+ return dev;
|
||||
+#else
|
||||
+ return SIO_DEVANY;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
static void
|
||||
sndio_onmove(void *arg, int delta)
|
||||
{
|
||||
@@ -135,18 +153,23 @@ sndio_onmove(void *arg, int delta)
|
||||
static void *
|
||||
sndio_mainloop(void *arg)
|
||||
{
|
||||
-#define MAXFDS 8
|
||||
- struct pollfd pfds[MAXFDS];
|
||||
+ struct pollfd *pfds;
|
||||
cubeb_stream *s = arg;
|
||||
int n, eof = 0, prime, nfds, events, revents, state = CUBEB_STATE_STARTED;
|
||||
size_t pstart = 0, pend = 0, rstart = 0, rend = 0;
|
||||
long nfr;
|
||||
|
||||
+ nfds = WRAP(sio_nfds)(s->hdl);
|
||||
+ pfds = calloc(nfds, sizeof (struct pollfd));
|
||||
+ if (pfds == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
DPR("sndio_mainloop()\n");
|
||||
s->state_cb(s, s->arg, CUBEB_STATE_STARTED);
|
||||
pthread_mutex_lock(&s->mtx);
|
||||
if (!WRAP(sio_start)(s->hdl)) {
|
||||
pthread_mutex_unlock(&s->mtx);
|
||||
+ free(pfds);
|
||||
return NULL;
|
||||
}
|
||||
DPR("sndio_mainloop(), started\n");
|
||||
@@ -274,6 +297,7 @@ sndio_mainloop(void *arg)
|
||||
s->hwpos = s->swpos;
|
||||
pthread_mutex_unlock(&s->mtx);
|
||||
s->state_cb(s, s->arg, state);
|
||||
+ free(pfds);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -281,6 +305,9 @@ sndio_mainloop(void *arg)
|
||||
sndio_init(cubeb **context, char const *context_name)
|
||||
{
|
||||
void * libsndio = NULL;
|
||||
+ struct sio_hdl *hdl;
|
||||
+
|
||||
+ assert(context);
|
||||
|
||||
#ifndef DISABLE_LIBSNDIO_DLOPEN
|
||||
libsndio = dlopen("libsndio.so.7.0", RTLD_LAZY);
|
||||
@@ -305,8 +332,17 @@ sndio_init(cubeb **context, char const *context_name)
|
||||
#undef LOAD
|
||||
#endif
|
||||
|
||||
+ /* test if sndio works */
|
||||
+ hdl = WRAP(sio_open)(sndio_get_device(), SIO_PLAY, 1);
|
||||
+ if (hdl == NULL) {
|
||||
+ return CUBEB_ERROR;
|
||||
+ }
|
||||
+ WRAP(sio_close)(hdl);
|
||||
+
|
||||
DPR("sndio_init(%s)\n", context_name);
|
||||
- *context = malloc(sizeof(*context));
|
||||
+ *context = malloc(sizeof(**context));
|
||||
+ if (*context == NULL)
|
||||
+ return CUBEB_ERROR;
|
||||
(*context)->libsndio = libsndio;
|
||||
(*context)->ops = &sndio_ops;
|
||||
(void)context_name;
|
||||
@@ -377,7 +413,7 @@ sndio_stream_init(cubeb * context,
|
||||
goto err;
|
||||
}
|
||||
s->context = context;
|
||||
- s->hdl = WRAP(sio_open)(NULL, s->mode, 1);
|
||||
+ s->hdl = WRAP(sio_open)(sndio_get_device(), s->mode, 1);
|
||||
if (s->hdl == NULL) {
|
||||
DPR("sndio_stream_init(), sio_open() failed\n");
|
||||
goto err;
|
@ -3,6 +3,7 @@
|
||||
|
||||
PORTNAME= firefox
|
||||
DISTVERSION= 68.3.0
|
||||
PORTREVISION= 1
|
||||
PORTEPOCH= 1
|
||||
CATEGORIES= www ipv6
|
||||
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source \
|
||||
|
113
www/firefox-esr/files/patch-cubeb-sndio
Normal file
113
www/firefox-esr/files/patch-cubeb-sndio
Normal file
@ -0,0 +1,113 @@
|
||||
https://github.com/kinetiknz/cubeb/commit/a71f116501fe39962599c435ef65066f7e7ea9f5
|
||||
https://github.com/kinetiknz/cubeb/commit/3025cbec70f3ed097ec9a2f33a4823316a29efc4
|
||||
https://github.com/kinetiknz/cubeb/commit/bb2735fa2ff680fdc615edbb363b19ff4a759503
|
||||
https://github.com/kinetiknz/cubeb/pull/564
|
||||
|
||||
diff --git a/src/cubeb_sndio.c b/src/cubeb_sndio.c
|
||||
index 4a05bd84..34b3513d 100644
|
||||
--- media/libcubeb/src/cubeb_sndio.c
|
||||
+++ media/libcubeb/src/cubeb_sndio.c
|
||||
@@ -32,6 +32,7 @@
|
||||
X(sio_eof) \
|
||||
X(sio_getpar) \
|
||||
X(sio_initpar) \
|
||||
+ X(sio_nfds) \
|
||||
X(sio_onmove) \
|
||||
X(sio_open) \
|
||||
X(sio_pollfd) \
|
||||
@@ -124,6 +125,23 @@ s16_to_float(void *ptr, long nsamp)
|
||||
*(--dst) = (1. / 32768) * *(--src);
|
||||
}
|
||||
|
||||
+static const char *
|
||||
+sndio_get_device()
|
||||
+{
|
||||
+#ifdef __linux__
|
||||
+ /*
|
||||
+ * On other platforms default to sndio devices,
|
||||
+ * so cubebs other backends can be used instead.
|
||||
+ */
|
||||
+ const char *dev = getenv("AUDIODEVICE");
|
||||
+ if (dev == NULL || *dev == '\0')
|
||||
+ return "snd/0";
|
||||
+ return dev;
|
||||
+#else
|
||||
+ return SIO_DEVANY;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
static void
|
||||
sndio_onmove(void *arg, int delta)
|
||||
{
|
||||
@@ -135,18 +153,23 @@ sndio_onmove(void *arg, int delta)
|
||||
static void *
|
||||
sndio_mainloop(void *arg)
|
||||
{
|
||||
-#define MAXFDS 8
|
||||
- struct pollfd pfds[MAXFDS];
|
||||
+ struct pollfd *pfds;
|
||||
cubeb_stream *s = arg;
|
||||
int n, eof = 0, prime, nfds, events, revents, state = CUBEB_STATE_STARTED;
|
||||
size_t pstart = 0, pend = 0, rstart = 0, rend = 0;
|
||||
long nfr;
|
||||
|
||||
+ nfds = WRAP(sio_nfds)(s->hdl);
|
||||
+ pfds = calloc(nfds, sizeof (struct pollfd));
|
||||
+ if (pfds == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
DPR("sndio_mainloop()\n");
|
||||
s->state_cb(s, s->arg, CUBEB_STATE_STARTED);
|
||||
pthread_mutex_lock(&s->mtx);
|
||||
if (!WRAP(sio_start)(s->hdl)) {
|
||||
pthread_mutex_unlock(&s->mtx);
|
||||
+ free(pfds);
|
||||
return NULL;
|
||||
}
|
||||
DPR("sndio_mainloop(), started\n");
|
||||
@@ -274,6 +297,7 @@ sndio_mainloop(void *arg)
|
||||
s->hwpos = s->swpos;
|
||||
pthread_mutex_unlock(&s->mtx);
|
||||
s->state_cb(s, s->arg, state);
|
||||
+ free(pfds);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -281,6 +305,9 @@ sndio_mainloop(void *arg)
|
||||
sndio_init(cubeb **context, char const *context_name)
|
||||
{
|
||||
void * libsndio = NULL;
|
||||
+ struct sio_hdl *hdl;
|
||||
+
|
||||
+ assert(context);
|
||||
|
||||
#ifndef DISABLE_LIBSNDIO_DLOPEN
|
||||
libsndio = dlopen("libsndio.so.7.0", RTLD_LAZY);
|
||||
@@ -305,8 +332,17 @@ sndio_init(cubeb **context, char const *context_name)
|
||||
#undef LOAD
|
||||
#endif
|
||||
|
||||
+ /* test if sndio works */
|
||||
+ hdl = WRAP(sio_open)(sndio_get_device(), SIO_PLAY, 1);
|
||||
+ if (hdl == NULL) {
|
||||
+ return CUBEB_ERROR;
|
||||
+ }
|
||||
+ WRAP(sio_close)(hdl);
|
||||
+
|
||||
DPR("sndio_init(%s)\n", context_name);
|
||||
- *context = malloc(sizeof(*context));
|
||||
+ *context = malloc(sizeof(**context));
|
||||
+ if (*context == NULL)
|
||||
+ return CUBEB_ERROR;
|
||||
(*context)->libsndio = libsndio;
|
||||
(*context)->ops = &sndio_ops;
|
||||
(void)context_name;
|
||||
@@ -377,7 +413,7 @@ sndio_stream_init(cubeb * context,
|
||||
goto err;
|
||||
}
|
||||
s->context = context;
|
||||
- s->hdl = WRAP(sio_open)(NULL, s->mode, 1);
|
||||
+ s->hdl = WRAP(sio_open)(sndio_get_device(), s->mode, 1);
|
||||
if (s->hdl == NULL) {
|
||||
DPR("sndio_stream_init(), sio_open() failed\n");
|
||||
goto err;
|
@ -3,7 +3,7 @@
|
||||
|
||||
PORTNAME= firefox
|
||||
DISTVERSION= 71.0
|
||||
PORTREVISION= 2
|
||||
PORTREVISION= 3
|
||||
PORTEPOCH= 1
|
||||
CATEGORIES= www ipv6
|
||||
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
|
||||
|
113
www/firefox/files/patch-cubeb-sndio
Normal file
113
www/firefox/files/patch-cubeb-sndio
Normal file
@ -0,0 +1,113 @@
|
||||
https://github.com/kinetiknz/cubeb/commit/a71f116501fe39962599c435ef65066f7e7ea9f5
|
||||
https://github.com/kinetiknz/cubeb/commit/3025cbec70f3ed097ec9a2f33a4823316a29efc4
|
||||
https://github.com/kinetiknz/cubeb/commit/bb2735fa2ff680fdc615edbb363b19ff4a759503
|
||||
https://github.com/kinetiknz/cubeb/pull/564
|
||||
|
||||
diff --git a/src/cubeb_sndio.c b/src/cubeb_sndio.c
|
||||
index 4a05bd84..34b3513d 100644
|
||||
--- media/libcubeb/src/cubeb_sndio.c
|
||||
+++ media/libcubeb/src/cubeb_sndio.c
|
||||
@@ -32,6 +32,7 @@
|
||||
X(sio_eof) \
|
||||
X(sio_getpar) \
|
||||
X(sio_initpar) \
|
||||
+ X(sio_nfds) \
|
||||
X(sio_onmove) \
|
||||
X(sio_open) \
|
||||
X(sio_pollfd) \
|
||||
@@ -124,6 +125,23 @@ s16_to_float(void *ptr, long nsamp)
|
||||
*(--dst) = (1. / 32768) * *(--src);
|
||||
}
|
||||
|
||||
+static const char *
|
||||
+sndio_get_device()
|
||||
+{
|
||||
+#ifdef __linux__
|
||||
+ /*
|
||||
+ * On other platforms default to sndio devices,
|
||||
+ * so cubebs other backends can be used instead.
|
||||
+ */
|
||||
+ const char *dev = getenv("AUDIODEVICE");
|
||||
+ if (dev == NULL || *dev == '\0')
|
||||
+ return "snd/0";
|
||||
+ return dev;
|
||||
+#else
|
||||
+ return SIO_DEVANY;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
static void
|
||||
sndio_onmove(void *arg, int delta)
|
||||
{
|
||||
@@ -135,18 +153,23 @@ sndio_onmove(void *arg, int delta)
|
||||
static void *
|
||||
sndio_mainloop(void *arg)
|
||||
{
|
||||
-#define MAXFDS 8
|
||||
- struct pollfd pfds[MAXFDS];
|
||||
+ struct pollfd *pfds;
|
||||
cubeb_stream *s = arg;
|
||||
int n, eof = 0, prime, nfds, events, revents, state = CUBEB_STATE_STARTED;
|
||||
size_t pstart = 0, pend = 0, rstart = 0, rend = 0;
|
||||
long nfr;
|
||||
|
||||
+ nfds = WRAP(sio_nfds)(s->hdl);
|
||||
+ pfds = calloc(nfds, sizeof (struct pollfd));
|
||||
+ if (pfds == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
DPR("sndio_mainloop()\n");
|
||||
s->state_cb(s, s->arg, CUBEB_STATE_STARTED);
|
||||
pthread_mutex_lock(&s->mtx);
|
||||
if (!WRAP(sio_start)(s->hdl)) {
|
||||
pthread_mutex_unlock(&s->mtx);
|
||||
+ free(pfds);
|
||||
return NULL;
|
||||
}
|
||||
DPR("sndio_mainloop(), started\n");
|
||||
@@ -274,6 +297,7 @@ sndio_mainloop(void *arg)
|
||||
s->hwpos = s->swpos;
|
||||
pthread_mutex_unlock(&s->mtx);
|
||||
s->state_cb(s, s->arg, state);
|
||||
+ free(pfds);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -281,6 +305,9 @@ sndio_mainloop(void *arg)
|
||||
sndio_init(cubeb **context, char const *context_name)
|
||||
{
|
||||
void * libsndio = NULL;
|
||||
+ struct sio_hdl *hdl;
|
||||
+
|
||||
+ assert(context);
|
||||
|
||||
#ifndef DISABLE_LIBSNDIO_DLOPEN
|
||||
libsndio = dlopen("libsndio.so.7.0", RTLD_LAZY);
|
||||
@@ -305,8 +332,17 @@ sndio_init(cubeb **context, char const *context_name)
|
||||
#undef LOAD
|
||||
#endif
|
||||
|
||||
+ /* test if sndio works */
|
||||
+ hdl = WRAP(sio_open)(sndio_get_device(), SIO_PLAY, 1);
|
||||
+ if (hdl == NULL) {
|
||||
+ return CUBEB_ERROR;
|
||||
+ }
|
||||
+ WRAP(sio_close)(hdl);
|
||||
+
|
||||
DPR("sndio_init(%s)\n", context_name);
|
||||
- *context = malloc(sizeof(*context));
|
||||
+ *context = malloc(sizeof(**context));
|
||||
+ if (*context == NULL)
|
||||
+ return CUBEB_ERROR;
|
||||
(*context)->libsndio = libsndio;
|
||||
(*context)->ops = &sndio_ops;
|
||||
(void)context_name;
|
||||
@@ -377,7 +413,7 @@ sndio_stream_init(cubeb * context,
|
||||
goto err;
|
||||
}
|
||||
s->context = context;
|
||||
- s->hdl = WRAP(sio_open)(NULL, s->mode, 1);
|
||||
+ s->hdl = WRAP(sio_open)(sndio_get_device(), s->mode, 1);
|
||||
if (s->hdl == NULL) {
|
||||
DPR("sndio_stream_init(), sio_open() failed\n");
|
||||
goto err;
|
Loading…
Reference in New Issue
Block a user