Index: head/multimedia/tvheadend/Makefile =================================================================== --- head/multimedia/tvheadend/Makefile (revision 472316) +++ head/multimedia/tvheadend/Makefile (revision 472317) @@ -1,95 +1,95 @@ # Created by: Bernhard Froehlich # $FreeBSD$ PORTNAME= tvheadend PORTVERSION= 4.2.6 DISTVERSIONPREFIX= v -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= multimedia PATCH_SITES= https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/commit/ PATCHFILES= 3cb4f580565b.patch:-p1 MAINTAINER= decke@FreeBSD.org COMMENT= TV streaming server supporting DVB, IPTV, SAT>IP and more LICENSE= GPLv3 LICENSE_FILE= ${WRKSRC}/LICENSE.md BUILD_DEPENDS= bash:shells/bash \ cmake:devel/cmake \ ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat LIB_DEPENDS= libcurl.so:ftp/curl \ liburiparser.so:net/uriparser RUN_DEPENDS= dtv-scan-tables>=0:multimedia/dtv-scan-tables BROKEN_mips= fails to configure: No C compiler found BROKEN_mips64= fails to configure: No C compiler found BROKEN_powerpc64= fails to configure: No C compiler found USES= gettext gmake pkgconfig python shebangfix ssl USE_GITHUB= yes GNU_CONFIGURE= yes MAKE_JOBS_UNSAFE= yes USE_RC_SUBR= ${PORTNAME} PORTSCOUT= limitw:1,even SHEBANG_FILES= ${WRKSRC}/Autobuild.sh \ ${WRKSRC}/configure \ ${WRKSRC}/support/apt-update \ ${WRKSRC}/support/configure.inc \ ${WRKSRC}/support/getmuxlist \ ${WRKSRC}/support/version TVHUSER?= tvheadend TVHGROUP?= tvheadend USERS= ${TVHUSER} GROUPS= ${TVHGROUP} webcamd SUB_LIST+= TVHUSER="${TVHUSER}" \ TVHGROUP="${TVHGROUP}" CONFIGURE_ENV+= PLATFORM=freebsd CONFIGURE_ARGS+=--disable-dvbscan --disable-zlib --disable-hdhomerun_static \ --disable-bintray_cache --disable-ffmpeg_static --disable-pie CFLAGS+= -I${LOCALBASE}/include -Wno-conversion -Wno-int-to-pointer-cast LDFLAGS+= -L${LOCALBASE}/lib -lexecinfo -lssl -lcrypto -lz OPTIONS_DEFINE= AVAHI DVBCSA HDHOMERUN INOTIFY TRANSCODING XMLTV OPTIONS_DEFAULT=DVBCSA HDHOMERUN INOTIFY AVAHI_LIB_DEPENDS= libavahi-client.so:net/avahi-app DVBCSA_DESC= Replace internal ffdecsa with dvbcsa DVBCSA_LIB_DEPENDS= libdvbcsa.so:multimedia/libdvbcsa DVBCSA_CONFIGURE_ENABLE= dvbcsa HDHOMERUN_DESC= Native support for HDHomeRun network tuners HDHOMERUN_LIB_DEPENDS= libhdhomerun.so:multimedia/libhdhomerun HDHOMERUN_CONFIGURE_ENABLE= hdhomerun_client INOTIFY_DESC= File system notifications support INOTIFY_LIB_DEPENDS= libinotify.so:devel/libinotify INOTIFY_CONFIGURE_ENABLE= inotify INOTIFY_LDFLAGS= -linotify TRANSCODING_DESC= Transcoding for mobile and web clients TRANSCODING_LIB_DEPENDS= libavcodec.so:multimedia/ffmpeg TRANSCODING_CONFIGURE_ENABLE= libav XMLTV_RUN_DEPENDS= p5-xmltv>=0:textproc/p5-xmltv .include post-patch: @${REINPLACE_CMD} 's|-ldl||' \ ${WRKSRC}/Makefile @${REINPLACE_CMD} 's|-Werror||' \ ${WRKSRC}/Makefile post-install: ${STRIP_CMD} ${STAGEDIR}/${PREFIX}/bin/tvheadend .include Index: head/multimedia/tvheadend/files/patch-src_webui_webui.c =================================================================== --- head/multimedia/tvheadend/files/patch-src_webui_webui.c (nonexistent) +++ head/multimedia/tvheadend/files/patch-src_webui_webui.c (revision 472317) @@ -0,0 +1,74 @@ +From d19ee83aba20e5a64a6cef6dd528191a71f9aa31 Mon Sep 17 00:00:00 2001 +From: Jongsung Kim +Date: Tue, 29 May 2018 03:42:04 +0900 +Subject: [PATCH] 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.orig 2018-03-26 10:19:37.000000000 +0200 ++++ src/webui/webui.c 2018-06-13 14:47:58.627430000 +0200 +@@ -1570,7 +1570,7 @@ + #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,6 +1631,7 @@ + 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); +@@ -1644,6 +1645,9 @@ + return ret; + } + } ++#elif defined(PLATFORM_FREEBSD) || defined(PLATFORM_DARWIN) ++ o = file_start; ++#endif + + http_send_begin(hc); + http_send_header(hc, range ? HTTP_STATUS_PARTIAL_CONTENT : HTTP_STATUS_OK, +@@ -1656,16 +1660,22 @@ + 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); Property changes on: head/multimedia/tvheadend/files/patch-src_webui_webui.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property