aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beich <jbeich@FreeBSD.org>2019-12-27 23:50:42 +0000
committerJan Beich <jbeich@FreeBSD.org>2019-12-27 23:50:42 +0000
commit86ea81d303c1e57ca1ce9978029f0e23a0aafafd (patch)
treede950860fe7a13839225950d0fb79bfb991801ad
parentb6460d44b2db8d8cda19b199e47f76653c07f5a3 (diff)
downloadports-86ea81d303c1e57ca1ce9978029f0e23a0aafafd.tar.gz
ports-86ea81d303c1e57ca1ce9978029f0e23a0aafafd.zip
MFH: r521037
www/firefox: backport upstream sndio fixes Apparently, it fixes random tab crashes. Submitted by: tobik Approved by: ports-secteam blanket
Notes
Notes: svn path=/branches/2019Q4/; revision=521041
-rw-r--r--mail/thunderbird/Makefile1
-rw-r--r--mail/thunderbird/files/patch-cubeb-sndio113
-rw-r--r--www/firefox-esr/Makefile1
-rw-r--r--www/firefox-esr/files/patch-cubeb-sndio113
-rw-r--r--www/firefox/Makefile2
-rw-r--r--www/firefox/files/patch-cubeb-sndio113
6 files changed, 342 insertions, 1 deletions
diff --git a/mail/thunderbird/Makefile b/mail/thunderbird/Makefile
index ebaea22830c1..63f9191a1d2f 100644
--- a/mail/thunderbird/Makefile
+++ b/mail/thunderbird/Makefile
@@ -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
diff --git a/mail/thunderbird/files/patch-cubeb-sndio b/mail/thunderbird/files/patch-cubeb-sndio
new file mode 100644
index 000000000000..974af005402b
--- /dev/null
+++ b/mail/thunderbird/files/patch-cubeb-sndio
@@ -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;
diff --git a/www/firefox-esr/Makefile b/www/firefox-esr/Makefile
index 85dcf1ad4fc3..4cc538e12ebf 100644
--- a/www/firefox-esr/Makefile
+++ b/www/firefox-esr/Makefile
@@ -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 \
diff --git a/www/firefox-esr/files/patch-cubeb-sndio b/www/firefox-esr/files/patch-cubeb-sndio
new file mode 100644
index 000000000000..974af005402b
--- /dev/null
+++ b/www/firefox-esr/files/patch-cubeb-sndio
@@ -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;
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index 674e08babae3..f6ed7305c229 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -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 \
diff --git a/www/firefox/files/patch-cubeb-sndio b/www/firefox/files/patch-cubeb-sndio
new file mode 100644
index 000000000000..974af005402b
--- /dev/null
+++ b/www/firefox/files/patch-cubeb-sndio
@@ -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;