Hi,
Please merge attached two patches fixing FreeBSD-related issues. All they
are mainlined, but not included in v4.2.7.
The first one is slightly modified from original patch to be applied to
v4.2.7.
Thanks.
From 411f957733222e24df4ead9fb15332dcb2c116da Mon Sep 17 00:00:00 2001
From: Jongsung Kim <jongsung....@gmail.com>
Date: Tue, 29 May 2018 03:42:04 +0900
Subject: [PATCH 1/2] webui: fix http_serve_file() for FreeBSD

This patch fixes two major problems of FreeBSD port of tvheadend:

1. very high CPU usage while streaming a recored program
2. unable to stream the recorded program beyond 128MB.

Unlike Linux sendfile(), FreeBSD sendfile() requires an explicit
file offset, and return value must be checked to catch any error
occurred. (i.e., closed connection)

Patch tested with the latest FreeBSD port of tvheadend-4.2.6.
---
 src/webui/webui.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/webui/webui.c b/src/webui/webui.c
index 12b965230..331d998e9 100644
--- a/src/webui/webui.c
+++ b/src/webui/webui.c
@@ -1570,7 +1570,7 @@ http_serve_file(http_connection_t *hc, const char *fname,
 #if defined(PLATFORM_LINUX)
   ssize_t r;
 #elif defined(PLATFORM_FREEBSD) || defined(PLATFORM_DARWIN)
-  off_t r;
+  off_t o, r;
 #endif
   
   if (fconv) {
@@ -1631,11 +1631,15 @@ http_serve_file(http_connection_t *hc, const char *fname,
   sprintf(range_buf, "bytes %jd-%jd/%jd",
     file_start, file_end, (intmax_t)st.st_size);
 
+#if defined(PLATFORM_LINUX)
   if(file_start > 0)
     if (lseek(fd, file_start, SEEK_SET) != file_start) {
       close(fd);
       return HTTP_STATUS_INTERNAL;
     }
+#elif defined(PLATFORM_FREEBSD) || defined(PLATFORM_DARWIN)
+  o = file_start;
+#endif
 
   if (preop) {
     ret = preop(hc, file_start, content_len, opaque);
@@ -1656,16 +1660,22 @@ http_serve_file(http_connection_t *hc, const char *fname,
       chunk = MIN(1024 * ((stats ? 128 : 1024) * 1024), content_len);
 #if defined(PLATFORM_LINUX)
       r = sendfile(hc->hc_fd, fd, NULL, chunk);
+      if (r < 0) {
+        ret = -1;
+        break;
+      }
 #elif defined(PLATFORM_FREEBSD)
-      sendfile(fd, hc->hc_fd, 0, chunk, NULL, &r, 0);
+      ret = sendfile(fd, hc->hc_fd, o, chunk, NULL, &r, 0);
+      if (ret < 0)
+        break;
+      o += r;
 #elif defined(PLATFORM_DARWIN)
       r = chunk;
-      sendfile(fd, hc->hc_fd, 0, &r, NULL, 0);
-#endif
-      if(r < 0) {
-        ret = -1;
+      ret = sendfile(fd, hc->hc_fd, o, &r, NULL, 0);
+      if (ret < 0)
         break;
-      }
+      o += r;
+#endif
       content_len -= r;
       if (stats)
         stats(hc, r, opaque);
-- 
2.19.1

From 5363fb5cefbf8f9f0f4d38f81252ce93942665e4 Mon Sep 17 00:00:00 2001
From: Jongsung Kim <jongsung....@gmail.com>
Date: Tue, 20 Nov 2018 17:36:10 +0900
Subject: [PATCH 2/2] webui: epg: fix compatibility issue for FreeBSD

The EPG screen serviced by FreeBSD port of tvheadend has two abnormal control
behaviors:

    Reset All button makes the list empty
    Typing and then deleting any search string also makes the list empty.

This patch fixes the symptoms above.

Patch tested with the latest FreeBSD port of tvheadend-4.2.7.

Changes since v1:
- call reset only if required
---
 src/webui/static/app/epg.js | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/webui/static/app/epg.js b/src/webui/static/app/epg.js
index 2c8b914b2..7337177ef 100644
--- a/src/webui/static/app/epg.js
+++ b/src/webui/static/app/epg.js
@@ -902,10 +902,11 @@ tvheadend.epg = function() {
     epgFilterTitle.on('valid', function(c) {
         var value = c.getValue();
 
-        if (value.length < 1)
-            value = null;
-
-        if (epgStore.baseParams.title !== value) {
+        if (value.length < 1) {
+            delete epgStore.baseParams.title;
+            epgView.reset();
+        }
+        else if (epgStore.baseParams.title !== value) {
             epgStore.baseParams.title = value;
             epgView.reset();
         }
-- 
2.19.1

_______________________________________________
freebsd-ports@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to