<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/0929a4ddc1dbc7b1f8aa1abd1ba1b38167749a13">https://github.com/macports/macports-ports/commit/0929a4ddc1dbc7b1f8aa1abd1ba1b38167749a13</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 0929a4ddc1d shairport-sync: update to 4.3.4
</span>0929a4ddc1d is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 0929a4ddc1dbc7b1f8aa1abd1ba1b38167749a13
</span>Author: Sergey Fedorov <barracuda@macos-powerpc.org>
AuthorDate: Mon Sep 30 16:54:15 2024 +0800
<span style='display:block; white-space:pre;color:#404040;'> shairport-sync: update to 4.3.4
</span>---
multimedia/shairport-sync/Portfile | 18 +-
.../0412a84006773098c558ed3f8d4b57b8540244ce.patch | 33 ---
.../c064b8bae5f1d2816857646382de5ca3a1ab5e15.patch | 311 ---------------------
3 files changed, 6 insertions(+), 356 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/multimedia/shairport-sync/Portfile b/multimedia/shairport-sync/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index c060d6fdf21..5786af4460b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/multimedia/shairport-sync/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/multimedia/shairport-sync/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,8 +7,8 @@ PortGroup legacysupport 1.1
</span> # _dprintf
legacysupport.newest_darwin_requires_legacy 10
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup mikebrady shairport-sync 4.3.3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup mikebrady shairport-sync 4.3.4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 0
</span>
categories multimedia
license MIT BSD ISC
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -17,11 +17,11 @@ maintainers gmail.com:ale275 \
</span> description Shairport Sync is an AirPlay audio player
long_description AirTunes emulator. Shairport Sync adds multi-room capability with Audio Synchronisation.
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums rmd160 de46b4c437e6fb96e3cf43cf56833754a475dafb \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 988a8547983a9d328cb6dad823e388d97ab3326bacf045bc6f3da88ea471fa79 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 562363
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums rmd160 4af53a38966869abb461e919030301d09b82edb8 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 9da48b123639973e4a219c6d79a2f752fa4c7e6687e4b3419b378c4c75bd1dee \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 562663
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_build port:pkgconfig \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build path:bin/pkg-config:pkgconfig \
</span> port:autoconf \
port:automake
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -38,12 +38,6 @@ depends_lib path:lib/libssl.dylib:openssl \
</span> port:libgcrypt \
port:ffmpeg${ffmpeg_ver}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Patches from upstream, drop with the next update.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# https://trac.macports.org/ticket/70148
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-patch.pre_args-replace -p0 -p1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles c064b8bae5f1d2816857646382de5ca3a1ab5e15.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 0412a84006773098c558ed3f8d4b57b8540244ce.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> use_autoreconf yes
autoreconf.args -fvi
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/multimedia/shairport-sync/files/0412a84006773098c558ed3f8d4b57b8540244ce.patch b/multimedia/shairport-sync/files/0412a84006773098c558ed3f8d4b57b8540244ce.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 93d6601bcc9..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/multimedia/shairport-sync/files/0412a84006773098c558ed3f8d4b57b8540244ce.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,33 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 0412a84006773098c558ed3f8d4b57b8540244ce Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Mike Brady <4265913+mikebrady@users.noreply.github.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Sat, 15 Jun 2024 16:18:29 +0100
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] BB -- change the order of includes as mentioned in version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 4.3.4-dev-13-gc064b8ba
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- shairport.c | 4 ++--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 2 insertions(+), 2 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/shairport.c b/shairport.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 79d5e78f0..7a184ce6c 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/shairport.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/shairport.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -25,6 +25,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * OTHER DEALINGS IN THE SOFTWARE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <sys/socket.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <fcntl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <getopt.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -35,9 +37,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <popt.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <sys/socket.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <sys/wait.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <unistd.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/multimedia/shairport-sync/files/c064b8bae5f1d2816857646382de5ca3a1ab5e15.patch b/multimedia/shairport-sync/files/c064b8bae5f1d2816857646382de5ca3a1ab5e15.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index d57f5586a2c..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/multimedia/shairport-sync/files/c064b8bae5f1d2816857646382de5ca3a1ab5e15.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,311 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From c064b8bae5f1d2816857646382de5ca3a1ab5e15 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Mike Brady <4265913+mikebrady@users.noreply.github.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Sat, 15 Jun 2024 14:31:14 +0100
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Change order of some include file to facilitiate old Mac OS X
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- builds. Check existence of TCP_KEEPINTVL before trying to use it. Fix a race
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- condition with initial messages to the metadata queues. The race was that the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- queues and mutexes were definied in a thread, so could be delayed to after
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- when the main process was using them.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rtsp.c | 78 +++++++++++++++++++++++++++++++++--------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- shairport.c | 17 +++++-------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 2 files changed, 56 insertions(+), 39 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/rtsp.c b/rtsp.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index c1c387922..f997824e9 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/rtsp.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/rtsp.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -430,7 +430,8 @@ int pc_queue_add_item(pc_queue *the_queue, const void *the_stuff, int block) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rc = pthread_mutex_lock(&the_queue->pc_queue_lock);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (rc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- debug(1, "Error locking for pc_queue_add_item");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ debug(1, "Error %d (\"%s\") locking for pc_queue_add_item. Block is %d.", rc, strerror(rc),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ block);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cleanup_push(pc_queue_cleanup_handler, (void *)the_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // leave this out if you want this to return if the queue is already full
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // irrespective of the block flag.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1687,7 +1688,7 @@ void handle_get_info(__attribute((unused)) rtsp_conn_info *conn, rtsp_message *r
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- hdr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // In Stage 1, look for the DACP and Active-Remote
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *ar = msg_get_header(req, "Active-Remote");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (ar) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2101,8 +2102,8 @@ void handle_post(rtsp_conn_info *conn, rtsp_message *req, rtsp_message *resp) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (strcmp(req->path, "/feedback") == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- resp->respcode = 501;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- debug(1, "Connection %d: Airplay 1. Unhandled POST %s Content-Length %d", conn->connection_number,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- req->path, req->contentlength);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ debug(1, "Connection %d: Airplay 1. Unhandled POST %s Content-Length %d",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ conn->connection_number, req->path, req->contentlength);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- debug_log_rtsp_message(2, "POST request", req);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3085,7 +3086,7 @@ void handle_setup_2(rtsp_conn_info *conn, rtsp_message *req, rtsp_message *resp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // iap->ifa_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ((iap->ifa_addr) && (iap->ifa_netmask) && (iap->ifa_flags & IFF_UP) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ((iap->ifa_flags & IFF_LOOPBACK) == 0) &&
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- (config.interface == NULL || (strcmp(config.interface, iap->ifa_name) == 0))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (config.interface == NULL || (strcmp(config.interface, iap->ifa_name) == 0))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char buf[INET6_ADDRSTRLEN + 1]; // +1 for a NUL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- memset(buf, 0, sizeof(buf));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (iap->ifa_addr->sa_family == AF_INET6) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4081,13 +4082,9 @@ void metadata_pack_cleanup_function(void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void metadata_thread_cleanup_function(__attribute__((unused)) void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata_thread_cleanup_function called");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_close();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_delete(&metadata_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void *metadata_thread_function(__attribute__((unused)) void *ignore) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // create a pc_queue for passing information to a threaded metadata handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_init(&metadata_queue, (char *)&metadata_queue_items, sizeof(metadata_package),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- metadata_queue_size, "pipe");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_create_multicast_socket();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_package pack;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cleanup_push(metadata_thread_cleanup_function, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4113,13 +4110,9 @@ void *metadata_thread_function(__attribute__((unused)) void *ignore) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void metadata_multicast_thread_cleanup_function(__attribute__((unused)) void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata_multicast_thread_cleanup_function called");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_delete_multicast_socket();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_delete(&metadata_multicast_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void *metadata_multicast_thread_function(__attribute__((unused)) void *ignore) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // create a pc_queue for passing information to a threaded metadata handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_init(&metadata_multicast_queue, (char *)&metadata_multicast_queue_items,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- sizeof(metadata_package), metadata_multicast_queue_size, "multicast");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_create_multicast_socket();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_package pack;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cleanup_push(metadata_multicast_thread_cleanup_function, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4154,13 +4147,9 @@ void metadata_hub_close(void) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void metadata_hub_thread_cleanup_function(__attribute__((unused)) void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata_hub_thread_cleanup_function called");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_hub_close();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_delete(&metadata_hub_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void *metadata_hub_thread_function(__attribute__((unused)) void *ignore) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // create a pc_queue for passing information to a threaded metadata handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_init(&metadata_hub_queue, (char *)&metadata_hub_queue_items, sizeof(metadata_package),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- metadata_hub_queue_size, "hub");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_package pack;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cleanup_push(metadata_hub_thread_cleanup_function, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while (1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4188,14 +4177,10 @@ void metadata_mqtt_close(void) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void metadata_mqtt_thread_cleanup_function(__attribute__((unused)) void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata_mqtt_thread_cleanup_function called");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_mqtt_close();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_delete(&metadata_mqtt_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata_mqtt_thread_cleanup_function done");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void *metadata_mqtt_thread_function(__attribute__((unused)) void *ignore) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // create a pc_queue for passing information to a threaded metadata handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- pc_queue_init(&metadata_mqtt_queue, (char *)&metadata_mqtt_queue_items, sizeof(metadata_package),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- metadata_mqtt_queue_size, "mqtt");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- metadata_package pack;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cleanup_push(metadata_mqtt_thread_cleanup_function, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while (1) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4242,24 +4227,39 @@ void metadata_init(void) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ((fd == -1) && (errno != ENXIO)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char errorstring[1024];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- strerror_r(errno, (char *)errorstring, sizeof(errorstring));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- debug(1, "metadata_hub_thread_function -- error %d (\"%s\") opening pipe: \"%s\".", errno,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ debug(1, "metadata_init -- error %d (\"%s\") opening pipe: \"%s\".", errno,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (char *)errorstring, path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- warn("can not open metadata pipe -- error %d (\"%s\") opening pipe: \"%s\".", errno,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (char *)errorstring, path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free(path);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // initialise the metadata queues first, otherwise the might be a race condition
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // create a pc_queue for the metadata pipe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_init(&metadata_queue, (char *)&metadata_queue_items, sizeof(metadata_package),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ metadata_queue_size, "pipe");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (pthread_create(&metadata_thread, NULL, metadata_thread_function, NULL) != 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- debug(1, "Failed to create metadata thread!");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // create a pc_queue for the metadata_multicast_queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_init(&metadata_multicast_queue, (char *)&metadata_multicast_queue_items,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ sizeof(metadata_package), metadata_multicast_queue_size, "multicast");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (pthread_create(&metadata_multicast_thread, NULL, metadata_multicast_thread_function,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- NULL) != 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- debug(1, "Failed to create metadata multicast thread!");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef CONFIG_METADATA_HUB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // create a pc_queue for the metadata hub
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_init(&metadata_hub_queue, (char *)&metadata_hub_queue_items, sizeof(metadata_package),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ metadata_hub_queue_size, "hub");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (pthread_create(&metadata_hub_thread, NULL, metadata_hub_thread_function, NULL) != 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- debug(1, "Failed to create metadata hub thread!");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef CONFIG_MQTT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // create a pc_queue for the MQTT handler
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_init(&metadata_mqtt_queue, (char *)&metadata_mqtt_queue_items, sizeof(metadata_package),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ metadata_mqtt_queue_size, "mqtt");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (pthread_create(&metadata_mqtt_thread, NULL, metadata_mqtt_thread_function, NULL) != 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- debug(1, "Failed to create metadata mqtt thread!");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4273,6 +4273,7 @@ void metadata_stop(void) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata stop mqtt thread.");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cancel(metadata_mqtt_thread);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_join(metadata_mqtt_thread, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_delete(&metadata_mqtt_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata stop mqtt done.");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef CONFIG_METADATA_HUB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4280,6 +4281,7 @@ void metadata_stop(void) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cancel(metadata_hub_thread);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_join(metadata_hub_thread, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata stop hub done.");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_delete(&metadata_hub_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (config.metadata_enabled) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata stop multicast thread.");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4287,12 +4289,14 @@ void metadata_stop(void) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cancel(metadata_multicast_thread);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_join(metadata_multicast_thread, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata stop multicast done.");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_delete(&metadata_multicast_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (metadata_thread) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata stop metadata_thread thread.");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cancel(metadata_thread);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_join(metadata_thread, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // debug(2, "metadata_stop finished successfully.");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ pc_queue_delete(&metadata_queue);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4343,6 +4347,8 @@ int send_metadata_to_queue(pc_queue *queue, uint32_t type, uint32_t code, char *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pack.data = memdup(data, length); // only if it's not a null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // debug(1, "send_metadata_to_queue %x/%x", type, code);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int rc = pc_queue_add_item(queue, &pack, block);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (rc != 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (pack.carrier) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5642,22 +5648,33 @@ void *rtsp_listen_loop(__attribute((unused)) void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_of_reply = sizeof(SOCKADDR);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (getsockname(conn->fd, (struct sockaddr *)&conn->local, &size_of_reply) == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// skip this stuff in OpenBSD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifndef COMPILE_FOR_OPENBSD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Thanks to https://holmeshe.me/network-essentials-setsockopt-SO_KEEPALIVE/ for this.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // turn on keepalive stuff -- wait for keepidle + (keepcnt * keepinttvl time) seconds
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // before giving up an ETIMEOUT error is returned if the keepalive check fails
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // if TCP_KEEPINTVL is defined, check a few times before declaring the line dead
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // otherwise just wait a little while longer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef TCP_KEEPINTVL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int keepAliveIdleTime = 35; // wait this many seconds before checking for a dropped client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int keepAliveCount = 5; // check this many times
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int keepAliveInterval = 5; // wait this many seconds between checks
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int keepAliveIdleTime = 60; // wait this many seconds before dropping a client
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// --- the following is a bit too complicated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// decide to use IPPROTO_TCP or SOL_TCP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if defined COMPILE_FOR_BSD || defined COMPILE_FOR_OSX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define SOL_OPTION IPPROTO_TCP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define SOL_OPTION SOL_TCP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// decide to use TCP_KEEPALIVE or TCP_KEEPIDLE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef COMPILE_FOR_OSX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define KEEP_ALIVE_OR_IDLE_OPTION TCP_KEEPALIVE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5666,17 +5683,20 @@ void *rtsp_listen_loop(__attribute((unused)) void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (setsockopt(conn->fd, SOL_OPTION, KEEP_ALIVE_OR_IDLE_OPTION,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (void *)&keepAliveIdleTime, sizeof(keepAliveIdleTime))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- debug(1, "can't set the keepidle wait time");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ debug(1, "can't set the keepAliveIdleTime wait time");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// ---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// if TCP_KEEPINTVL is defined...
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef TCP_KEEPINTVL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (setsockopt(conn->fd, SOL_OPTION, TCP_KEEPCNT, (void *)&keepAliveCount,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sizeof(keepAliveCount))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- debug(1, "can't set the keepidle missing count");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ debug(1, "can't set the keepAliveCount count");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (setsockopt(conn->fd, SOL_OPTION, TCP_KEEPINTVL, (void *)&keepAliveInterval,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sizeof(keepAliveInterval))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- debug(1, "can't set the keepidle missing count interval");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ debug(1, "can't set the keepAliveCount count interval");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // initialise the connection info
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -5736,8 +5756,8 @@ void *rtsp_listen_loop(__attribute((unused)) void *arg) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_cleanup_pop(1); // should never happen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- die("could not establish a service on port %d -- program terminating. Is another instance of "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- "Shairport Sync running on this device?",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- config.port);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "Shairport Sync running on this device?",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ config.port);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- debug(1, "Oops -- fell out of the RTSP select loop");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pthread_exit(NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git a/shairport.c b/shairport.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index cb1e6cb30..79d5e78f0 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/shairport.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/shairport.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1207,8 +1207,8 @@ int parse_options(int argc, char **argv) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (config_error_type(&config_file_stuff) == CONFIG_ERR_FILE_IO)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- die("Error reading configuration file \"%s\": \"%s\".",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- config_file_real_path, config_error_text(&config_file_stuff));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ die("Error reading configuration file \"%s\": \"%s\".", config_file_real_path,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ config_error_text(&config_file_stuff));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- die("Line %d of the configuration file \"%s\":\n%s", config_error_line(&config_file_stuff),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- config_error_file(&config_file_stuff), config_error_text(&config_file_stuff));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2110,12 +2110,9 @@ int main(int argc, char **argv) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef COMPILE_FOR_OPENBSD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Any command to be executed at runtime? */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- int run_cmds =
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- config.cmd_active_start != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- config.cmd_active_stop != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- config.cmd_set_volume != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- config.cmd_start != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- config.cmd_stop != NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int run_cmds = config.cmd_active_start != NULL || config.cmd_active_stop != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ config.cmd_set_volume != NULL || config.cmd_start != NULL ||
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ config.cmd_stop != NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // mDNS supports maximum of 63-character names (we append 13).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2381,11 +2378,11 @@ int main(int argc, char **argv) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef COMPILE_FOR_OPENBSD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Past first and last sio_open(3), sndio(7) only needs "audio". */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--# ifdef CONFIG_METADATA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef CONFIG_METADATA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Only coverart cache is created.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Only metadata pipe is special. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!config.metadata_enabled)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--# endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Drop "cpath dpath". */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (run_cmds) {
</span></pre><pre style='margin:0'>
</pre>